給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若干個空格分開。
輸出格式:
每個測試用例的輸出占一行,輸出倒序后的句子,並且保證單詞間只有1個空格。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
解題思路:
先處理字符串,刪除多余的空格,形成新字符串。然后逆序輸出剛才處理好的字符串,即碰到空格就輸出單詞。
解題代碼:
#include<stdio.h>
#define MAX 500000
int main ()
{
char s;
char t[MAX];
int i = 0, count = 0, flag = 0;
while ((s=getchar()) != '\n') {
if (s != ' ') {
flag = 1; //標記遇到單詞
t[i++] = s;
count = 0;
} else if (count > 0) {
continue;
} else if (flag) {
t[i++] = s; //只有之前遇到單詞的情況下碰到空格才把這個空格寫入目標字符串
count ++;
}
} //刪除多余的空格,將目標字符串放入 t 中
count = 0;
int j;
for (i-=1; i>=0; i--) {
if (t[i] != ' ') {
count ++; // 這里的 count 統計的是單詞的位數
} else if (t[i]==' ' && count > 0) {
for (j=i+1; j<=i+count; j++) {
printf("%c", t[j]);
} //遇到空格就輸出單詞
printf(" ");
count = 0;
}
} // 還剩最后一個單詞沒輸出
for (j=i+1; j<=i+count; j++) {
printf("%c", t[j]);
}
return 0;
}