字符串操作:连接、子串、查找和替换
使用 std::string API 连接、切片、搜索和替换字符串内容。
字符串操作:连接、子串、查找和替换 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
使用 + 连接
+ 运算符会将两个字符串连接成一个新字符串。+= 会在原字符串上追加内容。
std::string a = "Hello, ";
std::string b = "World";
std::string c = a + b; // "Hello, World"
a += b; // a is now "Hello, World"高效追加
对长字符串反复使用 + 会创建许多临时对象。在热点循环中,请使用 += 或 append()。
std::string result;
for (auto& word : words) {
result += word;
result += ' ';
}使用 substr 获取子字符串
substr(pos, len) 返回一个从 pos 开始的新字符串。len 默认为字符串的剩余部分。
std::string s = "Hello, World";
std::cout << s.substr(0, 5); // "Hello"
std::cout << s.substr(7); // "World"查找子字符串:find
find(needle) 返回第一次匹配的索引;如果未找到,则返回 std::string::npos。
std::string s = "the quick brown fox";
auto pos = s.find("quick");
if (pos != std::string::npos)
std::cout << "Found at " << pos;从指定位置开始查找
传入第二个参数,即可从指定索引开始查找——这对于查找所有出现位置很有用。
std::string s = "abc abc abc";
size_t pos = 0;
while ((pos = s.find("abc", pos)) != std::string::npos) {
std::cout << pos << ' ';
pos += 3;
}rfind:从末尾查找
rfind 查找最后一次出现的位置。find_first_of 和 find_last_of 会从一个字符集合中查找任意字符。
原地替换
replace(pos, len, str) 会将 pos 处的 len 个字符替换为 str——新字符串的长度可以不同。
std::string s = "Hello, World";
s.replace(7, 5, "C++");
std::cout << s; // "Hello, C++"删除字符
erase(pos, len) 会删除一个子字符串。不带参数调用 erase() 会清空整个字符串。
std::string s = "Hello, World";
s.erase(5, 2); // removes ", "
std::cout << s; // "HelloWorld"插入字符
insert(pos, str) 会将 str 插入到 pos 处,并将其余内容向右移动。
std::string s = "HelloWorld";
s.insert(5, ", ");
std::cout << s; // "Hello, World"比较字符串
请使用标准比较运算符或 compare()。比较采用字典序。
std::string a = "apple", b = "banana";
if (a < b) std::cout << "apple comes first";替换所有出现位置
标准库没有提供一次调用即可完成全部替换的函数。请编写一个简单的辅助函数,或使用 std::regex。
void replaceAll(std::string& s, const std::string& from, const std::string& to) {
size_t pos = 0;
while ((pos = s.find(from, pos)) != std::string::npos) {
s.replace(pos, from.size(), to);
pos += to.size();
}
}快速检查
当子字符串不存在时,"hello".find("xyz") 会返回什么?
回顾
std::string 提供了丰富的 API:使用 + 和 += 进行拼接,使用 substr 进行切片,使用 find 进行查找,以及使用 replace、erase 和 insert 进行编辑。在调用 find 后,请与 std::string::npos 进行比较。
常见问题解答
「字符串操作:连接、子串、查找和替换」课时是免费的吗?
是的 — 「字符串操作:连接、子串、查找和替换」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「字符串操作:连接、子串、查找和替换」这节课中我会学到什么?
使用 std::string API 连接、切片、搜索和替换字符串内容。 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「字符串操作:连接、子串、查找和替换」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- std::string 与 C 风格字符数组
- 字符串操作:连接、子串、查找和替换
- 用于解析的字符串流 stringstream
- 字符串转换:to_string 和 stoi