当前位置: 首页 > news >正文

【C++经典例题】反转字符串中单词的字符顺序:两种实现方法详解

在 C++ 中,字符串处理是常见的面试与算法练习题。本题目标是:反转字符串中每个单词的字符顺序,但保持单词顺序不变

示例:

输入: "Hello World" 输出: "olleH dlroW"

也就是说:

Hello → olleH World → dlroW

下面介绍两种经典实现方法


一、方法一:使用字符串流(stringstream)

利用 将字符串按单词拆分,然后逐个反转。

思路

  1. 使用stringstream按空格分割单词
  2. 使用reverse()反转单词
  3. 拼接结果字符串

代码实现

#include<iostream>#include<sstream>#include<algorithm>usingnamespacestd;stringreverseWords(string s){stringstreamss(s);string word;string result;while(ss>>word){reverse(word.begin(),word.end());result+=word+" ";}result.pop_back();returnresult;}intmain(){string str="Hello World";cout<<reverseWords(str)<<endl;return0;}

输出:

olleH dlroW

时间复杂度

O(n)

空间复杂度:

O(n)

优点:

  • 代码简单
  • 可读性好

缺点:

  • 使用额外空间

二、方法二:双指针原地反转

使用双指针扫描字符串,找到每个单词的范围并进行反转。

思路

  1. 遍历字符串
  2. 找到单词起始位置
  3. 找到单词结束位置
  4. 调用reverse()反转

代码实现

#include<iostream>#include<algorithm>usingnamespacestd;stringreverseWords(string s){intstart=0;for(inti=0;i<=s.size();i++){if(i==s.size()||s[i]==' '){reverse(s.begin()+start,s.begin()+i);start=i+1;}}returns;}intmain(){string str="Hello World";cout<<reverseWords(str)<<endl;return0;}

输出:

olleH dlroW

时间复杂度

O(n)

空间复杂度:

O(1)

优点:

  • 原地操作
  • 更节省内存

缺点:

  • 实现稍复杂

三、两种方法对比

方法思路空间复杂度适合场景
stringstream拆分单词再反转O(n)简单实现
双指针原地扫描O(1)面试优化

四、进阶问题(面试常问)

很多面试会继续延伸:

1 反转单词顺序

例如:

"Hello World" → "World Hello"

2 去除多余空格

例如:

" hello world " → "world hello"

3 整个字符串反转 + 单词反转

经典算法:

1 先整体反转 2 再逐个单词反转

该题在很多算法平台都有类似题目,例如:

  • LeetCode

五、总结

反转字符串中单词字符顺序的核心方法:

1️⃣ 使用字符串流分割单词
2️⃣ 使用双指针原地反转

关键函数:

reverse()

来自:


如果你愿意,我可以继续给你整理一份C++字符串算法经典 20 题(面试高频),包括:

  • 反转字符串
  • 最长回文子串
  • 字符串压缩
  • KMP 字符串匹配算法。
http://www.jsqmd.com/news/485819/

相关文章:

  • 2026-03-16 如何在 Jenkins 中使用 Docker(deepseek)
  • 1.54英寸墨水屏桌面终端设计与实现
  • 紫微斗数职场指南:从命盘看出最适合你的职业方向(含14主星解析)
  • MySQL迁移中的高效数据覆盖实践:REPLACE INTO 的技术细节与应用
  • 全自动撕膜仪品牌推荐,靠谱厂家一次整理 - 品牌推荐大师
  • 计算机毕设java的旅游攻略系统 基于SpringBoot的个性化旅行规划与服务平台 智慧旅游信息管理与在线预订系统
  • 【C++哲学】面向对象的三大特性之 继承
  • 连锁零售企业商旅平台排名Top 6与选型全指南:从痛点拆解到实践落地 - 资讯焦点
  • 以SOC为均衡条件的电容分层均衡系统,每组4节电池,先组内再组间均衡,支持充放电设置及上下限调节
  • 计算机毕业设计springboot高校宿舍报修管理系统 基于Spring Boot框架的高校公寓设施运维管理平台 智慧校园学生寝室维修服务系统的设计与实现
  • 三家值得一式的携程任我行礼品卡回收平台 - 淘淘收小程序
  • 哈尔滨欧米奇西点烘焙学校,绥化地区推荐选择吗 - 工业品网
  • 计算机毕业设计springboot高校宿舍管理系统 基于SpringBoot的高校学生公寓智慧管理平台设计与实现 SpringBoot框架下校园住宿服务综合管理系统开发
  • C++ 二叉树、堆与搜索二叉树机制-个人复习记录
  • 分析长春可代加工的PE排水管厂家,选购时注意这些要点 - mypinpai
  • 2026销售管理系统全链路对比:6类CRM产品核心能力拆解
  • 车辆稳定性相平面MATLAB程序绘制探索
  • 斯坦福 CS336 从零构建大模型 (2025 春) - 第十三讲:数据(Data 1)
  • 知识付费平台推荐指南:2026年五大主流平台实测对比 - 资讯焦点
  • 计算机毕业设计springboot基于JAVA个人博客网站系统 基于Spring Boot的个人博客平台设计与实现 基于Java Web的独立博客系统开发与实现
  • 合规深耕抗衰科研赛道 斐萃科学抗衰研究院成立 - 速递信息
  • 2026权威评测:毕业论文AIGC痕迹怎么破?盘点降重神器!
  • 刷屏全网的开工手势舞,藏着58同城的行业级营销破局思路 - 速递信息
  • 视频会议EasyDSS语音转写STT/AI会议摘要/AI大模型智能技术重构会议全流程
  • 新人必读:瑞祥卡回收渠道选择与流程全攻略5大注意事项 - 团团收购物卡回收
  • 当光伏遇上粒子群:配电网优化配置实战
  • 系统集成项目管理工程师章节占分比(2023~2025年)
  • DL00359:‘深度学习CNN水稻病虫害自动识别系统‘——助力种植用户快速识别虫害
  • Cosmos-Reason1-7B效果展示:从原始视频到物理因果链推理的完整可视化
  • Agent 记忆系统架构设计:从双层存储到智能整合的工程实践