C++中string的replace函数用于替换指定位置的字符或子串,支持多种重载形式。1. 基本语法replace(pos, len, str)从pos开始将长度为len的子串替换为str;2. 可结合find循环实现全局字符替换;3. 支持C风格字符串、重复字符及迭代器范围替换;4. 注意避免位置越界和未更新查找位置导致的死循环问题。该函数高效直观,适用于常规字符串修改,复杂场景可结合std::regex_replace使用。

在C++中,替换字符串中的字符或子串是一个常见的操作。我们通常使用标准库中的 std::string 类提供的 replace() 成员函数来完成这一任务。本文将详细介绍 C++ 中 string 的 replace 函数的用法,并结合实际例子说明如何替换字符串中的字符或子字符串。
replace 函数的基本语法
std::string 的 replace() 函数有多种重载形式,最常用的是以下原型:
string& replace(size_t pos, size_t len, const string& str);
参数说明:
立即学习“C++免费学习笔记(深入)”;
- pos:开始替换的位置(从0开始)
- len:要被替换的字符数量
- str:用来替换的新字符串
该函数返回调用对象的引用(即修改后的字符串本身)。
替换指定位置的子串
假设我们有一个字符串 "Hello world",想把 "world" 替换成 "C++",可以这样做:
#include iostream>
#include
using namespace std;
int main() {
string s = "Hello world";
s.replace(6, 5, "C++"); // 从第6个位置开始,替换5个字符
cout
return 0;
}
这里,"world" 从索引6开始,长度为5,被替换成 "C++"。
替换单个字符或多个相同字符
如果只是想替换某个特定字符,比如把所有 'a' 变成 'x',replace() 不直接支持全局替换,但可以用循环配合 find() 实现:
string s = "banana";
size_t pos = 0;
while ((pos = s.find('a', pos)) != string::npos) {
s.replace(pos, 1, "x");
pos += 1; // 继续下一位
}
cout
注意:每次替换后要更新位置,避免无限循环。
使用其他重载形式
replace 还支持其他参数形式,例如:
- s.replace(pos, len, c_str):用C风格字符串替换
- s.replace(pos, len, n, ch):用 n 个 ch 字符替换
- s.replace(it1, it2, str):用迭代器指定范围进行替换(适用于STL风格操作)
示例:用5个 '*' 替换中间部分
string s = "username@example.com";
s.replace(3, 8, 5, '*'); // 从第3位开始,替换8个字符为5个'*'
cout
基本上就这些。掌握 replace() 函数的关键是理解其参数含义,并结合 find() 等函数实现复杂替换逻辑。实际开发中,也可以考虑使用 std::regex_replace 进行正则替换,适用于更复杂的模式匹配场景。replace 函数高效且直观,是处理字符串修改的有力工具。不复杂但容易忽略细节,比如位置越界或未更新查找位置导致死循环。










