- 题目描述:
-
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。
- 输入:
-
输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。
- 输出:
-
对应每个测试用例,请按照要求输出修正过的字符串。
- 样例输入:
-
3 abc 13 abc efg hij
- 样例输出:
-
cba cba gfe jih
-
#include<iostream> #include<sstream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { int n; string s; while (cin >> n && n) { int flag = 0; cin.ignore(); //吃掉换行符使getline正常使用 vector<string> sv; getline(cin, s); if (s[0]==' ') // 注意判断前后有无空字符,有则压缩成一个 sv.push_back(""); if (s[s.size()-1]== ' ') flag = 1; istringstream is(s); while (is >> s) { //字符串流,每次输入由空格隔开的一个串 reverse (s.begin(), s.end()); sv.push_back(s); } for (int i=0; i!=sv.size()-1; ++i) cout << sv[i] << " "; if (flag) cout << sv[sv.size()-1] << " " << endl; else cout << sv[sv.size()-1] << endl; } return 0; }