标题:求助一道C 语言题!!!!
只看楼主
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
结帖率:100%
 问题点数:0 回复次数:18 
求助一道C 语言题!!!!
任意给定一个字符串s,将s中的各字母按照字典顺序排序形成新的字符串t,依次输出t中字符在原字符串s中的前一位
如exam  排序后为aemx
a的前一位是x,e的前一位是m ,m的前一位是a, x的前一位是e
最后输出xmae
搜索更多相关主题的帖子: 字符串 字典 
2011-06-06 00:13
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

#define SIZE 81

#define SWAP(a, b)  \
                int temp = (a);     \
                (a) = (b);      \
                (b) = temp;


void select_sort_asc(char * s) {
    int i, j, k;
    for(i = 0; i < strlen(s) - 1; i++) {
        k = i;
        for(j = i + 1; j < strlen(s); j++) {
            if(s[j] < s[k]) {
                k = j;
            }
        }
        if(k != i) {
            SWAP(s[k], s[i]);
        }
    }
}

char matching(char ch, char * s) {
    int i = 0;
    while(s[i]) {
        if(s[i] == ch) {
            if(i == 0) {
                return s[strlen(s) - 1];
            } else {
                return s[i - 1];
            }
        }
        i++;
    }
}

int main(void) {
    char s[SIZE], t[SIZE], * p = t;
    gets(s);
    strcpy(t, s);
    select_sort_asc(t);
    while(*p)
        printf("%c", matching(*p++, s));
    puts("");
    return 0;
}




My life is brilliant
2011-06-06 00:43
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 2楼 lz1091914999
要是输入example  应该输出的是xelpame
你的输出的是xeepame 这个有点问题啊
2011-06-06 12:24
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

void swap(char * i, char * j) {
    char k = *i;
    *i = *j;
    *j = k;
}

int main() {
    char s[100] = {0}, si[100][2] = {0};
    int i, j, l;
    printf("Give me a string: ");
    fflush(stdout);
    scanf("%s", s);
    l = strlen(s);
    for (i = 0; i < l; i++) {
        si[i][0] = s[i];
        si[i][1] = i - 1;
    }
    si[0][1] = l - 1;
    for (i = 0; i < l - 1; i++) {
        for (j = i + 1; j < l; j++) {
            if (si[j][0] < si[i][0]) {
                swap(&si[i][0], &si[j][0]);
                swap(&si[i][1], &si[j][1]);
            }
        }
    }
    for (i = 0; i < l; i++) {
        printf("%c", s[si[i][1]]);
    }
    printf("\n");
    return 0;
}
2011-06-06 13:19
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 4楼 voidx
如果要求字符串s中首字母在最终输出的字符串中位置是多少 怎么算
比如exam中e在xmae的位置是4
2011-06-06 18:06
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
在 si 里面搜不就得了
2011-06-06 18:18
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 6楼 voidx
我的问题是如果字符相同的话输出的数字就有错误
2011-06-06 18:48
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
OK,明白了。你这么做:
example    假设你要搜这个 e
取 idx = 6 - 1;
如果 idx == -1, idx = strlen(s) - 1;
在 si 里搜 si[i][1] == idx;
i 即为答案
2011-06-06 18:52
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 8楼 voidx
取 idx = 6 - 1 ???这个是什么意思
2011-06-06 19:06
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 8楼 voidx
额 知道了 看错了
2011-06-06 19:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-341996-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.110460 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved