[模拟,字符串处理]7-7 翻转单词顺序 (20分)

Posted luoyoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟,字符串处理]7-7 翻转单词顺序 (20分)相关的知识,希望对你有一定的参考价值。

给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。

输入格式:

输入可能包括多行。每行代表一个字符串,除了空格外,标点符号和普通字母一样处理。你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30。

输出格式:

输出包括多行,每行对应输入的一行,为翻转后的字符串。

输入样例:

student. a am I

输出样例:

I am a student.

 

 1 #include <bits/stdc++.h>  // 保留了空格
 2 using namespace std;
 3 #define maxN 50005
 4 int main()
 5 {
 6     stack<string> st;
 7     string s, tmp;
 8     int len, i;
 9     while(getline(cin,s))
10     {
11         i = 0;
12         len = s.length();
13         while(i < len)
14         {
15             tmp = "";
16             while(s[i] ==   && i < len)
17             {
18                 tmp = tmp + s[i];
19                 i++;
20             }
21             if(tmp.length() > 0)
22                 st.push(tmp);
23             tmp = "";
24             while(s[i] !=   && i < len)
25             {
26                 tmp = tmp + s[i];
27                 i ++;
28             }
29             if(tmp.length() > 0)
30                 st.push(tmp);
31         }
32         while(!st.empty())
33         {
34             s = st.top();
35             st.pop();
36             cout << s;
37         }
38         cout << endl;
39     }
40     return 0;
41 }

附上单行柳神代码:

 1 #include <iostream>
 2 #include <stack>
 3 using namespace std;
 4 int main()
 5  {
 6  stack<string> v;
 7  string s;
 8  while(cin >> s) v.push(s);
 9  cout << v.top();
10  v.pop();
11  while(!v.empty()) {
12  cout << " " << v.top();
13  v.pop();
14  }
15  return 0;
16 }

 

以上是关于[模拟,字符串处理]7-7 翻转单词顺序 (20分)的主要内容,如果未能解决你的问题,请参考以下文章

翻转单词顺序

翻转单词顺序

反转单词顺序 VS 左旋转字符串

《剑指offer》:[42]翻转英文中单词顺序

剑指[58]----翻转单词的顺序

剑指 Offer 58 - I. 翻转单词顺序