標籤:blog io ar os sp 2014 log as 時間
題目1361:翻轉單詞順序時間限制:2 秒記憶體限制:32 兆特殊判題:否提交:1935解決:572題目描述:JOBDU最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能協助他嗎?輸入:每個測試案例為一行,表示一句英文句子。我們保證一個句子的單詞數不會超過600,每個單詞的長度也不會超過30。但是需要注意的是Fish是個不拘小節的人,有時候兩個單詞中間可能會有很多空格。為了方便起見,你可以認為一行的字元總數不會超過50000個,標點符號可以和普通字母一樣處理。輸出:對應每個測試案例,把翻轉後的正確的句子單獨輸出一行。範例輸入:student. a am II'm a Freshman and I like JOBDU!範例輸出:I am a student.JOBDU! like I and Freshman a I'm
#include <iostream>#include<stdio.h>#include<string.h>using namespace std;void reverseStr(char* begin,char*end){ if(begin==NULL||end==NULL){ return; } while(begin<end){ swap(*begin,*end); begin++; end--; }}char* reverseSentence(char* pData){ if(pData==NULL){ return NULL; } char* begin = pData; char* end = pData; while( *end!='\0'){ end++; } end--; //翻轉整個句子 reverseStr(begin,end); //翻轉句子中的每個單詞 begin = end = pData; while(*begin!='\0'){ if(*begin==' '){ begin++; end++; }else if(*end==' '||*end=='\0'){ reverseStr(begin,--end); begin=++end; }else{ end++; } } return pData;}int main(){ char data[50001]; while(gets(data)){ printf("%s\n",reverseSentence(data)); } return 0;}
劍指offer系列源碼-翻轉單詞順序