C++中find()函数的使用方法详解
创作时间:
作者:
@小白创作中心
C++中find()函数的使用方法详解
引用
CSDN
1.
https://m.blog.csdn.net/2201_75539691/article/details/145100177
C++中find()函数是用于在字符串中查找指定的子串或单个字符,并返回子串/字符在字符串中的第一次出现位置。如果查找成功,则返回子串位置的值(起始位置);如果查找失败,则返回特殊值string::npos,表示没有找到。
find()是字符串类的成员函数,提供了多种不同调用模式:
size_t find(const string& str, size_t pos = 0) const; // 查找字符串
size_t find(const char* s, size_t pos = 0) const; // 查找 C 风格字符串
size_t find(const char* s, size_t pos, size_t n) const; // 查找指定长度子串
size_t find(char c, size_t pos = 0) const; // 查找单个字符
- str:指定的查找子串;
- s:C风格字符串,通过指针传递;
- pos:开始查找的位置,默认为 0;
- n:要匹配的子串长度;
- c:单个字符。
如果在字符串中没有找到子串,find()函数将返回字符串类的静态常量npos,表示失败。npos是字符串类中定义的静态常量,应用于不实效的查找情况:
static const size_t npos = -1; // npos通常是一个特殊大的值,如:18446744073709551615
基本示例:字符串查找
本例用于查找字符串中指定子串的位置:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world hello everyone";
string str = "llo";
size_t n = s.find(str); // 查找字符串 "llo",从字符串开始
cout << n << endl; // 输出:2
n = s.find(str, n + 1); // 从上次位置之后再查找
cout << n << endl; // 输出:14
return 0;
}
字符查找
如果查找单个字符,可使用下列代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world hello everyone";
size_t n = s.find('o'); // 查找字符 'o',从字符串开始
cout << n << endl; // 输出:4
n = s.find('o', n + 1); // 从上次位置之后再查找
cout << n << endl; // 输出:7
return 0;
}
查找失败处理
通过判断返回值是否为npos,可以确实子串是否存在:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world hello everyone";
string str = "bit";
size_t n = s.find(str);
if (n != string::npos) {
cout << "找到,位置是:" << n << endl;
} else {
cout << "没有找到" << endl;
}
return 0;
}
应用提示
迭代查找子串
一些应用场景需要迭代找出所有匹配位置:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world hello everyone";
string str = "llo";
size_t pos = s.find(str);
while (pos != string::npos) {
cout << "找到:" << pos << endl;
pos = s.find(str, pos + 1); // 继续查找
}
return 0;
}
提取上下文信息
find()函数还可以结合substr()提取匹配子串周围的上下文:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello world hello everyone";
string str = "world";
size_t pos = s.find(str);
if (pos != string::npos) {
size_t start = (pos > 5) ? pos - 5 : 0;
size_t len = str.length() + 10;
cout << "上下文:" << s.substr(start, len) << endl;
}
return 0;
}
忽略大小写查找
find()函数默认区分大小写。如果需要忽略大小写,可以先将字符串转换为小写后再查找:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s = "Hello World Hello Everyone";
string str = "hello";
// 转换为小写
transform(s.begin(), s.end(), s.begin(), ::tolower);
transform(str.begin(), str.end(), str.begin(), ::tolower);
size_t pos = s.find(str);
if (pos != string::npos) {
cout << "找到,位置是:" << pos << endl;
} else {
cout << "没有找到" << endl;
}
return 0;
}
C++中的find()函数是字符串操作中极其重要的工具。通过对其多种使用方法的学习,我们可以解决多种字符串匹配问题:
- 基本查找功能,用于快速定位子串或字符;
- 通过npos判断查找失败,确保程序稳定性;
- 结合循环,实现多次查找或全文匹配;
- 配合substr()等函数,提取匹配上下文。
此外,在实际开发中,还可以通过忽略大小写等变形用法来满足不同场景需求。希望本文能够帮助读者深入理解并熟练掌握find()函数的使用。
本文原文来自CSDN
热门推荐
游采石矶需要多少时间?采石矶游玩要多久?一份详细时间规划攻略助你玩转!
如何有效的优化机械硬盘
铸造装备之中频感应炉发展介绍
琥珀:一种珍贵药材的多重功效与使用指南
怎样保养琥珀?让您的琥珀保持光泽与美丽的秘诀
猫咪适应新环境,小技巧大帮助!
美术好的游戏下载合集 2024经典的艺术风格手游大全
性别认同障碍的原因有哪些方面表现
工业齿轮油的选用原则——如何选用合适的工业齿轮油?
家电产品哪些需要CCC认证?如何查询CCC认证证书?
研学旅行力促铜川教育与经济文化深度融合
健康险和医疗险的区别:从定义到服务全方位解析
董宇辉职位变动背后:直播行业的变局与挑战
康复——肘腕|肱三头肌远端肌腱断裂修复术后康复程序
股票隔夜单操作指南:从入门到精通
如何培训团队奉献精神
数字化急救:急救虚拟仿真实训系统
郑钦文爆冷出局 其实她曾考虑因伤退赛
从“冲量扩张”到“价值驱动” 保险代理人转型提速
劳保手套尺寸选择全知道:舒适与防护兼得的关键
DDR4 SDRAM:现代计算机系统的主流内存标准
从电子垃圾中提炼贵金属黄金
自动驾驶合规宝典5~ADS安全评估和验证概述
外贸客户背调:如何精准挖掘高价值买家?
黄金再度与美元、美债收益率同涨!这是否暗示着什么?
参与·融入·互识·共进——中国当代学术“走出去”策略
JS回调方法出错怎么办?11个实用解决方案
一篇文章带你了解音乐版权,教你合理使用音乐版权
关于白蛋白的知识,你需要明明白白?
如何通过5G技术提升医疗领域的服务质量?