【問題描述】編寫一個程序,從鍵盤接收一個字符串,然后按照字符順序從小到大進行排序,並刪除重復的字符。
【輸入形式】用戶在第一行輸入一個字符串。
【輸出形式】程序按照字符(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) 求出字符串長度)
