劍指offer42:翻轉單詞順序
阿新 • • 發佈:2019-02-06
- 題目描述:
- JOBDU最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
- 輸入:
- 每個測試案例為一行,表示一句英文句子。 我們保證一個句子的單詞數不會超過600,每個單詞的長度也不會超過30。但是需要注意的是Fish是個不拘小節的人,有時候兩個單詞中間可能會有很多空格。為了方便起見,你可以認為一行的字元總數不會超過50000個,標點符號可以和普通字母一樣處理。
- 輸出:
- 對應每個測試案例,把翻轉後的正確的句子單獨輸出一行。
- 樣例輸入:
-
student. a am I I'm a Freshman and I like JOBDU!
- 樣例輸出:
-
I am a student. JOBDU! like I and Freshman a I'm
示例程式碼如下:
#ifndef PROGRAM42_H #define PROGRAM42_H #include <iostream> #include <string.h> void ReverseWord(char* start,char* end){ if(start==NULL || end==NULL) return; while(start<end){ char temp; temp=*start; *start=*end; *end=temp; --end; ++start; } } void ReverseString(char* str){ if(str==NULL) return; char *pstr=str; char *start=NULL,*end=NULL; while(*pstr!='\0'){ while(*pstr!='\0' && *pstr==' ') ++pstr; start=pstr;//單詞的開始 while(*pstr!='\0' && *pstr!=' ') ++pstr; end=pstr-1;//單詞的結尾 ReverseWord(start,end); } } void TestProgram42(){ char str[18000]; while(std::cin.getline(str,18000)){ char *start=str; char *end=str+strlen(str)-1; ReverseWord(start,end); ReverseString(str); std::cout<<str<<std::endl; } } #endif