c0602_对字符串中的字符进行排序并删除重复字符


【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
【输入形式】用户在第一行输入一个字符串。
【输出形式】程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。
【样例输入】badacgegfacb
【样例输出】abcdefg
【样例说明】用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最后输出为abcdefg
【评分标准】结果完全正确得20分,每个测试点4分。提交源程序名为stringsort.c

-------------------------

个人代码:

 

#include <stdio.h>
#include <string.h>

void deleteone(char *s, int n){
    int l,i;
    l = strlen(s);
    for(i=n;i<l-1;i++){
        s[i] = s[i+1];
    }
    s[i] = '\0';
}

int main(){
    char s[256],temp;
    int i,j,l;
    gets(s);
    l = strlen(s);
    for(i=0;i<l-1;i++){
        for(j=0;i+j<l-1;j++){
            if(s[j]>s[j+1]){
                temp = s[j];
                s[j] = s[j+1];
                s[j+1] = temp;
            }
        }
    }
    for(i=0;i<l-1;i++){
        while(s[i+1]==s[i]){
            deleteone(s,i+1);
            l--;
        }
    }
    puts(s);
    getchar();
    return 0;
}

标答:

#include <stdio.h>

void sort(char *s);
void put(char *s);

main()
{
    char c[128];
    scanf("%s", c);
    sort(c);
    put(c);
}

void sort(char *s)
{
    int i, j, index, temp;
    for (i = 0; s[i] != '\0'; i++) {
        index = i;
        for (j = i; s[j] != '\0'; j++) {
            if (s[index] > s[j]) {
                index = j;
            }
        }
        temp = s[index];
        s[index] = s[i];
        s[i] = temp;
    }
}

void put(char *s)
{
    int i;
    for (i = 0; s[i] != '\0'; i++) {
        if (s[i-1] != s[i]) {
            printf("%c", s[i]);
        }
    }
}

1、对一个字符串的每一个字符进行处理时,判断结束位置可用标答中的方法:

    for (i = 0; s[i] != '\0'; i++) {
            ...;
    }            

  (不需要用 strlen(s) 求出字符串长度)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM