alison-f

【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
【输入形式】用户在第一行输入一个字符串。
【输出形式】程序按照字符(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) 求出字符串长度)

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-01-17
  • 2021-08-03
  • 2021-09-01
  • 2021-09-17
  • 2021-09-15
  • 2021-12-15
  • 2022-01-23
猜你喜欢
  • 2022-01-06
  • 2022-02-21
  • 2021-11-27
  • 2021-09-05
  • 2022-03-08
相关资源
相似解决方案