




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 是最通用的,但标准库还提供几个语义明确的变体:
rfind():从末尾向前查找最后一次出现位置find_first_of():查找任意一个给定字符的首次出现(类似“集合中任一字符”)find_first_not_of():查找第一个不在给定字符集中的字符find_last_of()、find_last_not_of():对应反向版本