C++如何在字符串中查找子串?(find方法示例)

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

在C++中,string::find 是最常用、最直接的子串查找方法,它返回子串首次出现的位置(索引),未找到则返回 string::npos

基本用法:查找第一次出现的位置

findstd::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():对应反向版本