C++中字符串的查找与替换

本文详细介绍了C++中字符串的查找与替换操作,包括使用find和rfind函数查找子串的位置,以及使用replace函数替换字符串中指定的部分。通过具体代码示例展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中字符串的查找与替换

字符串的查找是指查看在字符串中是否有另一个指定的子串。

字符串的替换是指将字符串中指定部分替换成指定的内容。

#include <iostream>

int main(int argc,const char* argv[])
{
	
	std::string str1 = "Hello World!";
	
	//在字符串str1中查看是否有字符o,如果有则返回字符o在字符串str1中的位置,否则返回npos
	std::cout << str1.find("o") << std::endl;
	
	//在字符串str1中的第五个位置开始向后查找是否有字符o,如果有则返回字符o在字符串str1中的位置
	std::cout << str1.find("o",5) << std::endl;

	//在字符串str1中从后向前查看是否有字符o,如果有则返回o在字符串str1中的位置
		std::cout << str1.rfind("o") <<std::endl;

	//在字符串str1中的第五个位置开始从后向前查看是否有字符o,如果有则返回字符o在字符串str1中的位置。
	std::cout << str1.rfind("o",5) << std::endl;


	std::string str2 = "China";
	
	//将字符串str1中第6个字符开始连续5个字符替换成str2的内容
	str1.replace(6,5,str2);
	std::cout << str1 << std::endl;

	return 0;
}
<think>我们讨论C++中的字符串查找替换C++标准库提供了多种方法来实现这些操作,主要涉及std::string类的成员函数以及标准算法库。主要方法包括:1.查找:使用find(),rfind(),find_first_of(),find_last_of(),find_first_not_of(),find_last_not_of()等成员函数。2.替换:使用replace()成员函数。另外,我们还可以使用标准库中的算法,比如std::search、std::replace等,但是这些通常需要配合迭代器使用。下面将分别介绍查找替换的常用方法,并给出示例代码。一、查找操作:1.find():从字符串指定位置开始查找一个子串或字符,返回第一个匹配的位置(即下标),如果没找到则返回string::npos。2.rfind():从字符串的末尾开始向前查找,返回子串或字符的位置。3.find_first_of():查找字符串中第一个给定字符集中任意字符匹配的字符。4.find_first_not_of():查找字符串中第一个不在给定字符集中的字符。5.find_last_of():查找最后一个出现在给定字符集中的字符。6.find_last_not_of():查找最后一个不在给定字符集中的字符。二、替换操作:replace():替换字符串中的一部分。有多个重载版本,常用的有:-使用另一个字符串替换:str.replace(pos,len,str2)-使用另一个字符串的一部分来替换:str.replace(pos,len,str2,subpos,sublen)-使用C风格字符串替换:str.replace(pos,len,cstr)-使用多个相同字符替换:str.replace(pos,len,n,c)-使用迭代器指定的范围替换:str.replace(begin,end,new_str)注意:replace操作可能会改变字符串的长度,所以需要谨慎处理。然而,标准库中并没有提供一次替换所有匹配项的函数,如果要替换所有匹配项,我们需要自己编写循环或使用算法。示例1:查找字符串中的子串示例2:替换字符串中的子串(单次替换)示例3:替换字符串中所有匹配的子串(多次替换)下面给出代码示例:</think> ### C++字符串查找替换的实现 #### 一、核心方法 1. **查找方法** - `find()`:查找子串(返回首个匹配的位置索引) - `rfind()`:反向查找子串 - `find_first_of()`:查找字符集中任意字符的首次出现 - `find_last_of()`:查找字符集中任意字符的最后一次出现 2. **替换方法** - `replace()`:替换指定位置的子串 - 结合查找 + 循环:实现全局替换 --- #### 二、代码示例 ```cpp #include <iostream> #include <string> #include <algorithm> int main() { // 原始字符串 std::string text = "Cats love fish. Cats hate water."; const std::string target = "Cats"; const std::string replacement = "Dogs"; // 1. 单次查找替换 size_t pos = text.find(target); // 查找首次出现位置 if (pos != std::string::npos) { text.replace(pos, target.length(), replacement); // 替换 std::cout << "单次替换后: " << text << "\n"; } // 2. 全局替换(所有匹配项) std::string global_text = "Cats love fish. Cats hate water."; size_t start_pos = 0; while ((start_pos = global_text.find(target, start_pos)) != std::string::npos) { global_text.replace(start_pos, target.length(), replacement); start_pos += replacement.length(); // 跳过已替换部分 } std::cout << "全局替换后: " << global_text << "\n"; // 3. 使用算法库全局替换C++20) #if __cplusplus >= 202002L std::string algo_text = "Cats love fish. Cats hate water."; std::ranges::replace(algo_text, 'C', 'K'); // 替换单个字符 std::cout << "字符替换后: " << algo_text << "\n"; #endif // 4. 自定义大小写不敏感查找(需转换为小写) std::string mixed_text = "CATS love fish. cAts hate water."; std::string lower_text = mixed_text; std::transform(lower_text.begin(), lower_text.end(), lower_text.begin(), ::tolower); std::string lower_target = "cats"; // 后续使用 lower_text 和 lower_target 进行查找... return 0; } ``` #### 三、关键解释 1. **`std::string::npos`** - 特殊常量(通常是 `-1` 或 `size_t` 最大值),表示查找失败。 2. **全局替换逻辑** - 循环中更新 `start_pos` 防止无限循环:替换后跳过新插入字符串的长度。 3. **大小写不敏感处理** - 需将字符串统一转为小写/大写后再查找(但替换时需操作原始字符串)。 4. **C++20 新特性** - `<algorithm>` 中的 `std::ranges::replace` 可直接修改字符序列(需编译器支持 C++20)。 --- **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值