单词倒排 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; }