news 2026/5/11 15:36:58

std::string查找替换字符全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
std::string查找替换字符全攻略

在C++的std::string类中查找并替换指定字符,主要通过其成员函数findrfindreplace以及算法库<algorithm>中的std::replace来实现。具体操作取决于你是要替换所有匹配字符,还是只替换第一个最后一个匹配字符,亦或是替换指定位置范围内的字符。

一、核心方法对比

下表汇总了主要的查找与替换方法及其适用场景:

方法类别使用的核心函数功能描述适用场景
替换所有匹配字符std::replace(来自<algorithm>)将字符串中所有等于指定值的字符替换为新字符。全局、无条件替换所有旧字符。
查找并替换第一个匹配find()+replace()找到字符第一次出现的位置,并在该位置进行替换。只替换首次出现的字符。
查找并替换最后一个匹配rfind()+replace()找到字符最后一次出现的位置,并在该位置进行替换。只替换末尾出现的字符。
替换指定位置字符operator[]at()直接通过索引访问并修改单个字符。已知确切位置时直接替换。
替换子串中的字符find()+replace()循环在字符串的特定子串范围内查找并替换所有匹配字符。仅在字符串的某一部分进行操作。

二、具体实现与代码示例

1. 替换所有匹配字符(使用std::replace

这是最简单、最直接的方法。std::replace算法会遍历整个字符串(或指定的迭代器范围),将所有等于目标值的字符替换为新值。

#include <iostream> #include <string> #include <algorithm> // 必须包含此头文件以使用 std::replace int main() { std::string str = "Hello, World! Welcome to the world of C++."; char oldChar = 'o'; char newChar = '*'; // 使用 std::replace 替换所有 'o' 为 '*' std::replace(str.begin(), str.end(), oldChar, newChar); // std::cout << "替换所有字符后: " << str << std::endl; // 输出: Hell*, W*rld! Welc*me t* the w*rld *f C++. return 0; }
2. 查找并替换第一个匹配字符

组合使用find()replace()成员函数。find()返回找到位置的索引(size_t类型),若未找到则返回std::string::npos

#include <iostream> #include <string> int main() { std::string str = "apple banana apple"; char oldChar = 'a'; char newChar = '@'; size_t pos = str.find(oldChar); // 查找第一个 'a' 的位置 if (pos != std::string::npos) { // 在 pos 位置,将 1 个字符替换为 newChar str.replace(pos, 1, 1, newChar); // std::cout << "替换第一个字符后: " << str << std::endl; // 输出: @pple banana apple } else { std::cout << "未找到字符 '" << oldChar << "'" << std::endl; } return 0; }
3. 查找并替换最后一个匹配字符

使用rfind()(反向查找)来定位最后一个匹配项,然后使用replace()

#include <iostream> #include <string> int main() { std::string str = "apple banana apple"; char oldChar = 'a'; char newChar = '#'; size_t pos = str.rfind(oldChar); // 从后往前查找最后一个 'a' if (pos != std::string::npos) { str.replace(pos, 1, 1, newChar); // std::cout << "替换最后一个字符后: " << str << std::endl; // 输出: apple banana #pple } return 0; }
4. 替换指定位置的字符

如果已知要替换的字符索引,可以直接使用下标运算符[]at()成员函数进行赋值。at()会进行边界检查,更安全。

#include <iostream> #include <string> int main() { std::string str = "Hello"; size_t index = 1; // 要替换的索引位置 if (index < str.size()) { str[index] = 'a'; // 使用 operator[],将 'e' 替换为 'a' // str.at(index) = 'a'; // 使用 at() 是另一种安全的选择 std::cout << "替换指定位置字符后: " << str << std::endl; // 输出: Hallo } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 15:36:44

事件相机与RGB融合的高帧率语义分割技术

1. 事件相机与RGB融合的高帧率语义分割技术解析 在自动驾驶和机器人导航等实时感知系统中&#xff0c;准确理解动态场景的语义信息至关重要。传统基于RGB相机的语义分割方法面临一个根本性限制&#xff1a;受限于标准相机的低帧率&#xff08;通常20-30Hz&#xff09;&#xff…

作者头像 李华
网站建设 2026/5/11 15:35:34

三分钟学会免费B站视频解析:bilibili-parse终极使用指南

三分钟学会免费B站视频解析&#xff1a;bilibili-parse终极使用指南 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 你是否曾经遇到过这样的烦恼&#xff1f;看到B站上精彩的视频内容想要保存下来&am…

作者头像 李华
网站建设 2026/5/11 15:33:50

英雄联盟终极自动化工具:3步打造你的专属游戏助手

英雄联盟终极自动化工具&#xff1a;3步打造你的专属游戏助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款专为《英雄联盟…

作者头像 李华
网站建设 2026/5/11 15:33:45

如何在Mac上实现NTFS磁盘读写:Nigate开源工具3分钟部署方案

如何在Mac上实现NTFS磁盘读写&#xff1a;Nigate开源工具3分钟部署方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and manageme…

作者头像 李华
网站建设 2026/5/11 15:27:22

大连金牌导游依依的破局之路

我叫依依。不必再查我的投诉记录&#xff0c;从业七年&#xff0c;零投诉。不是没人查验&#xff0c;而是七年初心与服务&#xff0c;本就经得起任何考量。2019年入行&#xff0c;我从不愿把自己定义成普通导游。传统导游只是举旗带队、清点人数、催促集合、赶路打卡&#xff0…

作者头像 李华