答案:使用std::string的find函数可查找子串首次出现位置,若找到返回索引,否则返回std::string::npos。

在C++中查找字符串中的子串,最常用的方法是使用标准库std::string提供的find函数。它能快速定位子串首次出现的位置,也可以配合循环或其他方法查找所有匹配位置。下面详细介绍几种实用的查找方式。
使用 find 函数查找子串
find 是 std::string 类的一个成员函数,用于查找子串在原字符串中第一次出现的位置。如果找到,返回起始索引;未找到则返回 std::string::npos。
语法:size_t pos = str.find("substring"); 返回值为 size_t 类型,表示位置索引 若未找到,返回 std::string::npos(通常为 -1 的无符号表示)
示例代码:
#include #include int main() { std::string text = "Hello, welcome to C++ programming!"; std::string pattern = "welcome"; size_t pos = text.find(pattern); if (pos != std::string::npos) { std::cout << "子串在位置 " << pos << " 找到。n"; } else { std::cout << "未找到子串。n"; } return 0;}
查找所有匹配的子串位置
如果字符串中可能存在多个相同子串,可以通过循环调用 find,每次从上一次找到的位置之后继续搜索。
立即学习“C++免费学习笔记(深入)”;
关键点:更新查找起始位置为 pos + 1 或 pos + 子串长度,避免重复匹配同一位置。
size_t pos = 0;while ((pos = text.find("is", pos)) != std::string::npos) { std::cout << "找到子串,位置:" << pos << "n"; pos += 1; // 移动一位,查找下一个}
不区分大小写的子串查找
C++ 标准库没有直接提供忽略大小写的查找功能,需要手动实现。常见做法是将原字符串和目标子串都转换为小写(或大写),再进行比较。
可以使用 std::transform 配合 tolower 进行转换。
#include #include std::string toLower(const std::string& s) { std::string lower = s; std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower); return lower;}size_t caseInsensitiveFind(const std::string& str, const std::string& pattern) { return toLower(str).find(toLower(pattern));}
使用其他查找函数
std::string 还提供了几个变体函数,适用于不同场景:
rfind():从右往左查找,返回最后一次出现的位置 find_first_of():查找任意一个指定字符首次出现的位置 find_last_of():查找任意一个指定字符最后一次出现的位置 find_first_not_of() 和 find_last_not_of():查找不在指定集合中的字符
例如,查找最后一个 “or” 出现的位置:
size_t pos = text.rfind("or");
基本上就这些常用方法。掌握 find 及其变体,结合大小写处理和循环,就能高效完成大多数子串查找任务。实际使用时注意检查返回值是否为 npos,避免越界访问。
以上就是c++++怎么查找字符串中的子串_C++字符串查找子串操作指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478847.html
微信扫一扫
支付宝扫一扫