題幹如下:
本題要求編寫程式,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。如果長度相同,按照輸入的順序不變。
輸入格式:
輸入為若干英文單詞,每行乙個,以#作為輸入結束標誌。其中英文單詞總數不超過20個,英文單詞為長度小於10的僅由小寫英文本母組成的字串。
輸出格式:
輸出為排序後的結果,每個單詞後面都額外輸出乙個空格。
輸入樣例:
blue輸出樣例:redyellow
green
purple #
red blue green yellow purple...
本題需要解決以下幾個問題:
**①如何一直輸入字串直到輸入#為止:**使用死迴圈while(1),後滿足一定條件便跳出迴圈(break語句)的方法。此題的條件顯然是if(str[i][0]==』#』)。
**②如何對字串進行排序:**對於初學者來說,首先學習的排序是「氣泡排序」,那如何對字串進行基於長度的「氣泡排序」呢?這裡,我們需要使用strlen函式和strcpy函式:(這兩個函式均在標頭檔案中)
(1)strlen函式:統計字串的長度。統計空格,不統計末位』\0』。
(2)strcpy函式:即複製函式。strcpy(a,b)的作用可以簡單理解為將b中的字串複製到a中(注意:b字串的末位』\0』也會被複製,也就是說a完全變成了b)。
由於是對字元陣列的複製,函式需要傳遞指標,則括號內只需要寫陣列名(首元素位址)就可以了。
**以前我們學過數字大小的氣泡排序,其中交換兩數的部分通過temp暫存變數配合來實現。現在對字串進行交換也是如此。
(temp是另外建立的一維字元陣列)
if (strlen(str[k-1])>strlen(str[k]))解決了上述問題,我們就可以寫程式了:
#include
#include
intmain
(void
)int len=i;
//用len記錄i,增加程式的可讀性
int j,k;
char temp[11]
;for
(j=0
; j<=len-
1; j++
)//對字串進行氣泡排序}}
for(j=
0; j<=len-
1; j++
)return0;
}
PTA 英文單詞排序
本題要求編寫程式,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。如果長度相同,按照輸入的順序不變。輸入格式 輸入為若干英文單詞,每行乙個,以 作為輸入結束標誌。其中英文單詞總數不超過20個,英文單詞為長度小於10的僅由小寫英文本母組成的字串。輸出格式 輸出為排序後的結果,每個單詞後面都額外輸...
解題報告 字串 氣泡排序 英文單詞排序
解題思路 對於輸入的若干個英文單詞,通過氣泡排序進行比較,最終將英文單詞從小到大輸出。輸入 1 英文單詞總數不超過20個,英文單詞為長度小於10的字串通過二維陣列來實現輸入。2 先通過一維陣列str來輸入字串,同時判斷是否為 是則跳出迴圈,若不是則呼叫strcpy函式將str賦值給op。排序 1 因...
氣泡排序 PTA 7 5 英文單詞排序
本題要求編寫程式,輸入若干英文單詞,對這些單詞按長度從小到大排序後輸出。如果長度相同,按照輸入的順序不變。輸入格式 輸入為若干英文單詞,每行乙個,以 作為輸入結束標誌。其中英文單詞總數不超過20個,英文單詞為長度小於10的僅由小寫英文本母組成的字串。輸出格式 輸出為排序後的結果,每個單詞後面都額外輸...