本題要求編寫程式,讀入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;
}