題目1361:翻轉單詞順序-九度
阿新 • • 發佈:2019-02-19
題目描述:
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最近來了一個新員工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
推薦指數:※※
來源:http://ac.jobdu.com/problem.php?pid=1361
這道題是字串逆序,但單詞本身不能被逆序。分為兩步,首先將句本身逆轉。然後在識別出單詞,進行逆轉。
注意空格不需要處理。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; const int N=50001; void reversal(char *str,int len){ int i=0,j=len-1; while(i<j){ char tmp=str[i]; str[i]=str[j]; str[j]=tmp; i++; j--; } } void reversal_sent(char *str,int len){ reversal(str,len); int i=0,j=0; while(str[i]!='\0'){ j=i; while(str[j]==' '&&str[j]!='\0') j++; i=j; while(str[i]!=' '&&str[i]!='\0') i++; reversal(str+j,i-j); } } int main() { char str[N]; while(gets(str)){ reversal_sent(str,strlen(str)); printf("%s\n",str); } return 0; }