问题描述题目要求将一个英文句子中的单词顺序反转,同时保持每个单词内部的字符顺序不变。例如: 输入:"hello world" 输出:"world hello" 完整C++解决方案
- #include <iostream>
- #include <vector>
- #include <sstream>
- #include <algorithm>
- using namespACe std;
- string reverseSentence(string s) {
- // 去除首尾空格
- s.erase(0, s.find_first_not_of(" "));
- s.erase(s.find_last_not_of(" ") + 1);
-
- // 使用字符串流分割单词
- vector<string> words;
- stringstream ss(s);
- string word;
- while (ss >> word) {
- words.push_back(word);
- }
-
- // 反转单词顺序
- reverse(words.begin(), words.end());
-
- // 重新组合句子
- string result;
- for (int i = 0; i < words.size(); ++i) {
- if (i != 0) result += " ";
- result += words[i];
- }
-
- return result;
- }
- int main() {
- string line;
- while (getline(cin, line)) {
- cout << reverseSentence(line) << endl;
- }
- return 0;
- }
复制代码
关键技术点解析字符串预处理:去除首尾空格确保处理准确性 单词分割技巧:使用stringstream自动处理连续空格 反转算法:STL的reverse函数高效反转容器元素 结果重组:注意单词间空格的正确插入
常见错误及调试技巧扩展练习建议处理包含标点符号的句子 尝试不使用STL算法实现相同功能
链接:字符串
|