C/C++判断字符串是否包含子串的方法与代码示例
在C/C++开发中,快速判断主串是否包含特定子串是常见的字符串处理需求。根据使用语言的标准不同,主要有C语言的strstr函数和C++标准库std::string的find成员函数两种实现方式。
C语言风格:使用strstr函数
在传统的C语言接口中,字符串通常以字符数组形式存储,并以空字符'\0'作为结束标志。若要检测一个字符串(str1)中是否包含另一个字符串(str2),可以使用strstr库函数。
函数原型:
#include <cstring>
char * strstr(const char *str1, const char *str2);
功能说明: 该函数在主串str1中搜索第一次出现子串str2的位置。如果存在,函数返回指向该位置的char*指针;否则返回NULL。
代码示例:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string a = "abcdefghigklmn";
char *b = "def"; // 预期包含
char *c = "123"; // 预期不包含
// 在a中查找b
if (strstr(a.c_str(), b) == NULL)
cout << "not found\n"; // 输出结果:不存在
else
cout << "found\n"; // 输出结果:存在
// 在a中查找c
if (strstr(a.c_str(), c) == NULL)
cout << "not found\n"; // 输出结果:不存在
else
cout << "found\n"; // 输出结果:存在
return 0;
}
C++风格:使用string::find方法
对于C++开发者而言,直接使用std::string类的成员函数更为便捷。find函数用于在字符串对象中查找指定的参数字符串。
函数重载形式:
string::size_type string::find(string &str);
返回值逻辑: - 成功:返回子串在主串中出现的起始位置索引(string::size_type类型)。 - 失败:返回静态常量string::npos(通常为 -1 的无符号表示),表示未找到。
代码示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a = "abcdefghigklmn";
string b = "def"; // 预期包含
string c = "123"; // 预期不包含
string::size_type idx;
// 在a中查找b
idx = a.find(b);
if (idx == string::npos)
cout << "not found\n"; // 不存在
else
cout << "found\n"; // 存在
// 在a中查找c
idx = a.find(c);
if (idx == string::npos)
cout << "not found\n"; // 不存在
else
cout << "found\n"; // 存在
return 0;
}
总结与建议
以上两种方法在处理字符串包含关系时效果等同,运行效率几乎相同。然而,在C++项目中,由于无需手动处理字符指针转换(如调用.c_str()),string::find方法不仅代码编写更简便,也更具可读性,因此推荐在现代C++开发中优先使用。
以上就是C/C++编程判断String字符串是否包含某个字符串实现示例的详细内容,更多关于C/C++判断字符串包含子串的技巧请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













