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