該題出自《C語言程序設計——現代方法》第8章編程題14
編寫程序顛倒句子中單詞的順序:
Enter a sentence: you can cage a swallow can't you?
Reversal of sentence: you can't swallow a cage can you?
思路:
利用getchar()函數自動讀取緩存的特性,用循環逐個讀取字符,當遇到句號、問好或者感嘆號(稱爲“終止符”)時,循環終止並把終止符儲存在一個char變量當中。
利用反向循環,遇空格符則終止。進入下一個循環,打印單詞,接着尋找下一個空格符。
代碼如下:
#include <stdio.h> int main() { int i, j, cnt; char ch,end; char sentence[N]; printf("Enter a sentence: "); i = 0; while(1) //逐個讀取字符的循環 { ch = getchar(); if(ch == '.' || ch == '!' || ch == '?') break; //遇終止符 sentence[i++] = ch; } end = ch; //保存終止符 i--; //將指針退回到最後一個字母 printf("Reserval of sentence: "); while(i >= 0 ) { for(cnt = 0;(i >= 0) && (sentence[i] != ' ');i--, cnt++) ;//尋找空格符 for(j = i + 1;cnt > 0;cnt--)//打印單詞 printf("%c", sentence[j++]); if(i > 0) printf(" "); i--;//進入前一個單詞 } printf("%c\n", end); return 0; }
程序運行結果:
這是我暫時所能想到的方法,如果有更加簡便的方法,歡迎一起討論一下。