给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"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 }
原文:https://www.cnblogs.com/luoyoooo/p/12261605.html