跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 单词翻转:手动实现与标准库对比

C++ 解决单词翻转问题,通过手动遍历字符、双指针交换及标准库 reverse 函数三种方式对比。分析输入输出逻辑,展示不同实现的性能与可读性差异,帮助理解字符串处理技巧。

星辰大海发布于 2026/3/28更新于 2026/6/922 浏览
C++ 单词翻转:手动实现与标准库对比

前言

字符串处理是 C++ 编程中的基础技能,而单词翻转则是考察字符操作逻辑的经典题目。这道题不仅要求理解输入输出的格式,还涉及多种反转策略的权衡。本文将通过三种不同的实现方式——手动遍历、双指针交换以及标准库函数,深入剖析其背后的思路与优劣。

题目描述

B2122 单词翻转

小明写单词时习惯反着写,例如 hello 写成 olleh。现在给定一个包含多个单词的句子,要求将每个单词复原,并按行输出。

输入格式

一行字符串,单词间以空格分隔。

输出格式

每个单词占一行。

样例

输入:

olleh dlrow 

输出:

hello
world

方案一:手动遍历字符

这是最直观的思路。利用 cin >> s 的特性,它会自动按空格读取单词,我们只需对读入的字符串进行逆序输出即可。

代码实现

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    while (cin >> s) {
        for (int i = s.size() - 1; i >= 0; i--) {
            cout << s[i];
        }
        cout << endl;
    }
    return 0;
}

思路解析

这里利用了 cin 流提取符跳过空白符的特性。循环从字符串末尾向前遍历,逐个打印字符。这种方式不需要修改原字符串,直接输出结果,内存开销极小。不过,如果后续需要保留反转后的字符串,这种只读不写的模式就不太适用了。

方案二:双指针交换

如果想原地修改字符串,可以使用双指针法。定义左右两个索引,分别指向首尾,交换后向中间靠拢。

代码实现

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string str;
    while (cin >> str) {
        int left = 0;
        int right = str.size() - 1;
        while (left < right) {
            swap(str[left], str[right]);
            left++;
            right--;
        }
        cout << str << endl;
    }
    return 0;
}

思路解析

相比第一种方案,这种方法实际修改了字符串内容。swap 函数通常由编译器优化得很高效。注意边界条件,当 left 等于 right 时(奇数长度字符串的中间字符),无需交换,循环终止条件设为 < 而非 <= 是关键。

方案三:使用 std::reverse

C++ 标准库提供了现成的工具,既简洁又不易出错。

代码实现

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string str;
    while (cin >> str) {
        reverse(str.begin(), str.end());
        cout << str << endl;
    }
    return 0;
}

思路解析

std::reverse 接受迭代器范围作为参数。对于初学者来说,这能极大减少手写循环带来的 bug 风险。在实际工程中,除非有特殊的性能限制或学习需求,否则优先推荐使用标准库算法。

总结与对比

  • 手动遍历:适合仅需输出结果的场景,逻辑简单,但无法复用反转后的数据。
  • 双指针:适合需要原地修改的场景,体现了算法思想,但代码量稍多。
  • 标准库:开发效率最高,可读性最强,推荐日常使用。

掌握这三种写法,能让你在面对字符串处理问题时更加游刃有余。

目录

  1. 前言
  2. 题目描述
  3. 输入格式
  4. 输出格式
  5. 样例
  6. 方案一:手动遍历字符
  7. 代码实现
  8. 思路解析
  9. 方案二:双指针交换
  10. 代码实现
  11. 思路解析
  12. 方案三:使用 std::reverse
  13. 代码实现
  14. 思路解析
  15. 总结与对比
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 从零开始手写 LLM 模型架构与实现
  • CentOS 7 安装 Nginx
  • Python 人工智能入门学习指南
  • VMware 17 Ubuntu 虚拟机与宿主机复制粘贴失效修复
  • 双指针算法实战:从原理到经典题目解析
  • C++ STL 详解:从零实现 vector 容器
  • 大模型基础知识与核心架构解析
  • Visual C++运行库完整安装指南:解决缺少 DLL 文件问题
  • Web 创建与设计指南
  • Open WebUI 本地部署指南:基于 Ollama 的 AI 对话界面搭建
  • 数据结构基础:数组、链表、栈与队列详解
  • 前端监控实战:基于 Sentry 的错误与性能管理
  • iOS 直播推流与播放实战:ijkplayer 集成与服务器配置
  • 职场边界感:平衡工作、生活与职业发展的关键
  • OpenClaw 上下文记忆短问题:Token 限制分析与 6 种扩容方案
  • 从 Mask 到彩色图:M2FP 可视化算法的实现原理
  • Python 开发环境搭建指南:从安装到配置
  • Form 表单提交数据配置、文件读取与 FormData 使用
  • LFM2.5-1.2B-Thinking 模型:打造个人 AI 写作助手
  • FPGA 光通信:Aurora 64B/66B 开发使用

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online