- 题目描述:
- 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【解题思路】本题应该是传统的题型的变形,我们可以先读入一行,然后从最后的字符开始处理,对于字符串我们使之逆序输出,对于空格原样输出。
本题注意两点:空格需要原样输出,不管有多少个;另外,利用gets函数读入一行效率要比getline更高。
AC code:
#include <cstdio> #include <string> #include <cstring> #include <iostream> using namespace std; int main() { char str[50005]; while(gets(str)) { int len=strlen(str),idx=len-1; while(idx>=0) { while(idx>=0 && str[idx]==' ') putchar(str[idx--]); int end=idx; while(idx>=0 && str[idx]!=' ')--idx; if(end==-1) break; for(int i=idx+1;i<=end;++i) putchar(str[i]); } printf(" "); } return 0; } /************************************************************** Problem: 1361 User: huo_yao Language: C++ Result: Accepted Time:50 ms Memory:1520 kb ****************************************************************/题目链接:http://ac.jobdu.com/problem.php?pid=1361九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299