C++ string查找方法
C++ string查找方法
内容
在 C++ 中,std::string
提供了多种方法获取特定字符或子字符串的位置。以下是常见操作的详细说明和示例:
1. 查找字符的首次出现位置
使用 find()
方法获取字符第一次出现的索引:
#include <string>
#include <iostream>
int main() {
std::string str = "hello world";
size_t pos = str.find('o'); // 查找字符 'o' 的首次出现位置
if (pos != std::string::npos) {
std::cout << "字符 'o' 首次出现在位置: " << pos << std::endl; // 输出 4
} else {
std::cout << "未找到字符" << std::endl;
}
return 0;
}
2. 查找字符的最后一次出现位置
使用 rfind()
方法从后向前查找字符:
size_t pos = str.rfind('o'); // 查找字符 'o' 的最后一次出现位置
// 输出: 字符 'o' 最后一次出现在位置: 7
3. 查找多个字符中的任意一个
使用 find_first_of()
查找给定字符集合中的第一个匹配项:
size_t pos = str.find_first_of("aeiou"); // 查找第一个元音字母的位置
// 输出: 第一个元音字母在位置: 1 ('e')
4. 从指定位置开始查找
通过第二个参数指定起始搜索位置:
size_t pos = str.find('l', 3); // 从索引 3 开始查找 'l'
// 输出: 位置: 3(字符串 "lo world" 中的第一个 'l')
5. 查找所有出现的位置
通过循环遍历所有匹配项:
size_t start_pos = 0;
char target = 'l';
std::cout << "字符 'l' 出现的位置: ";
while ((start_pos = str.find(target, start_pos)) != std::string::npos) {
std::cout << start_pos << " "; // 输出: 2 3 9
start_pos++; // 移动到下一个位置继续查找
}
6. 未找到时的处理
若未找到字符,返回值为 std::string::npos
:
size_t pos = str.find('z');
if (pos == std::string::npos) {
std::cout << "字符 'z' 未找到" << std::endl;
}
关键方法总结
方法 | 功能 | 示例 |
---|---|---|
find(char, start) |
查找字符首次出现位置 | str.find('o', 0) → 4 |
rfind(char, start) |
从后向前查找字符位置 | str.rfind('o') → 7 |
find_first_of(chars) |
查找字符集合中的首个匹配项 | str.find_first_of("aeiou") → 1 |
find_last_of(chars) |
查找字符集合中的最后一个匹配项 | str.find_last_of("aeiou") → 7 |
注意事项
- 返回值类型:所有方法返回
size_t
类型,若未找到返回std::string::npos
(通常为18446744073709551615
)。 - 大小写敏感:查找区分大小写,若需忽略大小写,需先转换字符串(如
std::tolower
)。 - 性能:
find
的时间复杂度为 O(n),多次查找需注意效率。
通过合理使用这些方法,可以高效操作字符串中的字符位置。
本文作者:Gold_stein
本文链接:https://www.cnblogs.com/smartljy/p/18749722
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2024-03-04 P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
2024-03-04 ACWing 247.亚特兰蒂斯
2024-03-04 246. 区间最大公约数