find()函数用于查找子串,若找到返回起始索引,否则返回string::npos;支持从指定位置开始查找,可查找子串或字符。

在C++中,string 类提供了多种查找子串的方法,最常用的是 find() 函数。通过它可以在一个字符串中查找另一个子串或字符的位置,如果找到返回起始索引,否则返回 string::npos。
find() 基本用法
find() 是 string 类中最核心的查找函数,支持查找子串、单个字符、C风格字符串等。
常用形式:- str.find(substr):从头开始查找子串 substr 的第一次出现位置
- str.find(substr, pos):从位置 pos 开始向后查找
- str.find(c):查找字符 c
示例代码:
string str = "Hello world, welcome to C++";string target = "welcome";
size_t pos = str.find(target);
if (pos != string::npos) {
cout } else {
cout }
其他查找函数
除了 find(),C++ string 还提供了一些更具体的查找方法,适用于不同场景。
立即学习“C++免费学习笔记(深入)”;
rfind()从右往左查找子串的最后一次出现位置,即逆向查找。
string str = "ababcabc";size_t pos = str.rfind("abc"); // 返回 5 find_first_of()
查找参数中任意一个字符首次出现的位置。
string str = "Hello World!";size_t pos = str.find_first_of("aeiou"); // 找到第一个元音字母 'e',返回 1 find_last_of()
查找参数中任意一个字符最后一次出现的位置。
string str = "Hello World!";size_t pos = str.find_last_of("o"); // 返回 7 find_first_not_of()
查找第一个不在指定字符集中的字符。
string str = " abc123";size_t pos = str.find_first_not_of(" "); // 跳过空格,返回 3('a'的位置) find_last_not_of()
查找最后一个不在指定字符集中的字符。
string str = "abc123!!!";size_t pos = str.find_last_not_of("!"); // 返回 6('3'的位置)
查找结果判断
所有查找函数都返回 size_t 类型的位置值。如果未找到,返回常量 string::npos(通常为 -1 转换为无符号数)。
正确判断方式: if (pos != string::npos) {// 找到了
} else {
// 没找到
}
注意不要直接和 -1 比较,因为 size_t 是无符号类型,容易出错。
基本上就这些常见用法。掌握 find 及其变体,就能高效处理大多数字符串查找需求。











