C/C++判断字符串是否包含子串的方法与代码示例

桃夭
桃夭
发布时间:2026-10-16 | 6人浏览过
原创

在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++判断字符串包含子串的技巧请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表