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