string::find返回子串首次出现位置,未找到返回string::npos;支持从指定pos开始查找;可用while循环配合更新pos查找所有匹配项。

在C++中,string::find 是最常用、最直接的子串查找方法,它返回子串首次出现的位置(索引),未找到则返回 string::npos。
基本用法:查找第一次出现的位置
find 是 std::string 的成员函数,语法为:size_t pos = str.find(sub);
其中 sub 可以是另一个 string、C 风格字符串(const char*)或单个字符。
- 返回值类型是
size_t(无符号整数),成功时为起始下标(从 0 开始) - 失败时返回
string::npos(通常定义为static const size_t npos = -1,即最大无符号值) - 查找区分大小写,且不支持正则或通配符
从指定位置开始查找
可以传入第二个参数 pos,表示从字符串中第 pos 个字符开始向后搜索:
-
str.find("ab", 2)表示跳过前两个字符,从索引 2 起查找 "ab" - 若
pos超出字符串长度,find直接返回npos - 常用于循环查找所有匹配项(配合更新
pos)
查找所有匹配位置(循环示例)
要找出子串在字符串中所有出现的位置,可用 while 循环配合 find:
string s = "ababab";
string sub = "ab";
size_t pos = 0;
while ((pos = s.find(sub, pos)) != string::npos) {
cout << "Found at: " << pos << endl;
pos += sub.length(); // 移动到匹配后一位,避免重叠重复匹配
}
输出:
Found at: 0
Found at: 2
Found at: 4
其他相关查找方法
find 是最通用的,但标准库还提供几个语义明确的变体:
立即学习“C++免费学习笔记(深入)”;
-
rfind():从末尾向前查找最后一次出现位置 -
find_first_of():查找任意一个给定字符的首次出现(类似“集合中任一字符”) -
find_first_not_of():查找第一个不在给定字符集中的字符 -
find_last_of()、find_last_not_of():对应反向版本










