天天看點

習題8-7 字元串排序輸入格式:輸出格式:輸入樣例:輸出樣例:

本題要求編寫程式,讀入5個字元串,按由小到大的順序輸出。

輸入格式:

輸入為由空格分隔的5個非空字元串,每個字元串不包括空格、制表符、換行符等空白字元,長度小于 80。

輸出格式:

按照以下格式輸出排序後的結果:

After sorted:
每行一個字元串
           

輸入樣例:

red yellow blue green white
           

輸出樣例:

After sorted:
blue
green
red
white
yellow
           

分析:此題并不難,但确實把我卡住了。原因有三。

第一:拖延症,選擇困難症。我一開始的想法是用冒泡 or 選擇排序,但是覺得雙循環加上 strcmp() 函數時間複雜度超級大,就開始向其他方法,半天想不出,拖了好久(是個壞毛病)。但其實也就五組字元串,可以不用先考慮複雜度。

第二:字元串的次序交換不同于整型數組元素的次序交換。整型元素排序隻需用到一個 temp 作為媒介進行交換;而字元串需要 temp[MAX] 字元數組(作為字元串媒介) 和 strcpy() 函數(起到字元串的“指派”作用)。這一點也是我開始沒想到的。

第三:冒泡排序有點忘記了,得複習一下。

#include<stdio.h>
#include<string.h>
#define MAX 80
#define N 5

int main()
{
    int i,j,temp[MAX];
    char word[N][MAX];                     //二維數組word,每行存放一個字元串
    for(i=0;i<N;i++)
        scanf("%s",word[i]);
    for(i=1;i<N;i++)                       //冒泡排序
    {
        for(j=0;j<N-i;j++)
        if(strcmp(word[j],word[j+1])>0)
        {
            strcpy(temp,word[j]);
            strcpy(word[j],word[j+1]);
            strcpy(word[j+1],temp);
        }
    }
    printf("After sorted:\n");
    for(i=0;i<N;i++)
        printf("%s\n",word[i]);
    return 0;
}
           

繼續閱讀