找回密码
 立即注册
查看: 23|回复: 0

字符串反转的艺术:牛客网13278题深度解析

[复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:23
  • 打卡月天数:11
  • 打卡总奖励:152
  • 最近打卡:2025-07-15 14:27:44

26

主题

0

回帖

4516

积分

VIP会员

积分
4516
发表于 2025-6-16 21:58:37 | 显示全部楼层 |阅读模式

问题描述
题目要求将一个英文句子中的单词顺序反转,同时保持每个单词内部的字符顺序不变。例如: 输入:"hello world" 输出:"world hello"
完整C++解决方案
  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4. #include <algorithm>

  5. using namespACe std;

  6. string reverseSentence(string s) {
  7.     // 去除首尾空格
  8.     s.erase(0, s.find_first_not_of(" "));
  9.     s.erase(s.find_last_not_of(" ") + 1);
  10.    
  11.     // 使用字符串流分割单词
  12.     vector<string> words;
  13.     stringstream ss(s);
  14.     string word;
  15.     while (ss >> word) {
  16.         words.push_back(word);
  17.     }
  18.    
  19.     // 反转单词顺序
  20.     reverse(words.begin(), words.end());
  21.    
  22.     // 重新组合句子
  23.     string result;
  24.     for (int i = 0; i < words.size(); ++i) {
  25.         if (i != 0) result += " ";
  26.         result += words[i];
  27.     }
  28.    
  29.     return result;
  30. }

  31. int main() {
  32.     string line;
  33.     while (getline(cin, line)) {
  34.         cout << reverseSentence(line) << endl;
  35.     }
  36.     return 0;
  37. }
复制代码

关键技术点解析
  • 字符串预处理:去除首尾空格确保处理准确性
  • 单词分割技巧:使用stringstream自动处理连续空格
  • 反转算法:STL的reverse函数高效反转容器元素
  • 结果重组:注意单词间空格的正确插入

常见错误及调试技巧
  • 空格处理不当:导致输出多余空格或缺少空格
  • 边界条件遗漏:空字符串、全空格字符串等情况
  • 效率问题:大规模数据时的性能优化

扩展练习建议
  • 实现原地反转算法(不额外使用存储空间)
  • 处理包含标点符号的句子
  • 尝试不使用STL算法实现相同功能

链接:字符串

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表