我的PAT系列文章更新重心已移至Github,歡迎來(lái)看PAT題解的小伙伴請(qǐng)到Github Pages瀏覽最新內(nèi)容垂券。此處文章目前已更新至與Github Pages同步。歡迎star我的repo。
題目
給定一句英語(yǔ)于微,要求你編寫(xiě)程序蹋嵌,將句中所有單詞的順序顛倒輸出育瓜。
輸入格式:
測(cè)試輸入包含一個(gè)測(cè)試用例,在一行內(nèi)給出總長(zhǎng)度不超過(guò) 80
的字符串栽烂。字符串由若干單詞和若干空格組成躏仇,其中單詞是由英文字母(大小寫(xiě)有區(qū)分)組成的字符串恋脚,單詞之間用 1 個(gè)空格分開(kāi),輸入保證句子末尾沒(méi)有多余的空格焰手。
輸出格式:
每個(gè)測(cè)試用例的輸出占一行糟描,輸出倒序后的句子。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
思路
只用一個(gè)字符串书妻,從后向前搜索單詞船响,依次輸出。
下面的代碼是不斷修改過(guò)的結(jié)果驻子,最后改成了一個(gè)很具有“C Bible”風(fēng)格的代碼(可能是這本書(shū)看多了(⊙﹏⊙)b)灿意。只用很基本的函數(shù),很多功能自己來(lái)實(shí)現(xiàn)崇呵,所以可讀性就比較差——但是我覺(jué)得挺有意思的(*__*)
運(yùn)行時(shí)間: 我以為就80個(gè)字符缤剧,還不不到1毫秒就完成?結(jié)果PAT的結(jié)果都是20毫秒上下域慷!之后我在自己的代碼里用time.h測(cè)試了一下:還不到0.1毫秒 (〃>皿<)
(有些題我在本地的時(shí)間可是比PAT結(jié)果還要長(zhǎng)的荒辕,搞不懂~~)
評(píng): 用高級(jí)語(yǔ)言的棧就輕松的多了(所以我覺(jué)得C++確實(shí)很適合PAT);為了將末尾的換行也跳過(guò)犹褒,我用了isspace
抵窒,這樣一來(lái)輸入格式變得很寬松,任何空白字符分隔的單詞都能接受叠骑。
附: 最初的代碼李皇。思路是一個(gè)單詞一個(gè)單詞地讀,然后倒序地連接起來(lái)宙枷,使用string.h的函數(shù)掉房。
代碼
最新代碼@github,歡迎交流
#include <stdio.h>
#include <ctype.h>
int main()
{
char line[81], *p = line, *i;
fgets(line, 81, stdin);
while(*++p); /* Go to the end of the string */
while(p > line) /* Will break at the beginning of the string */
{
while(isspace(*--p)) ; /* Find the end of a word */
while(p > line && !isspace(*(p - 1))) p--; /* Find start of the word */
for(i = p; *i && !isspace(*i); putchar(*i++)); /* Print the word */
putchar(p == line ? '\0' : ' '); /* print blankspace if not at end */
}
return 0;
}