单词倒排 C++
先整个字符串倒序,之后对每个单词倒序即可
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
while (getline(cin, s) && !s.empty()) {//读取一行字符
for (int i = 0; i < s.size(); i++) {//非字母字符换成空格
if (!((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')))
s[i] = ' ';
}
int i = 0, j = 0;
int n = s.size();
while (s[n - 1] == ' ') n--;
s.resize(n);//去掉字符串末尾多余空格
reverse(s.begin(), s.end());//字符串倒序
string res = "";
while (j < n) {
while (s[j] != ' ' && j < n) j++;//找到第一个空格的位置j,子串s[i,j)为一个倒序的单词
reverse(s.begin() + i, s.begin() + j);//将子串s[i,j)倒序,变回正常单词
if (j - i > 20)//if判断截取子串前20个字母或者直接截取整个子串
res += s.substr(i, 20);
else
res += s.substr(i, j - i);
res += ' ';//添加空格分隔单词
while (s[j] == ' ' && j < n) j++;//找到下一个单词的首字母位置
i = j;//将该首字母位置传给i作为下一次截取单词的起点
}
res.resize(res.size() - 1);//去掉截取最后一个单词时多添加的一个空格
cout << res << endl;
}
system("pause");
return 0;
}
京公网安备 11010502036488号