C/C++中查找子串或字符的函数(strstr和find)

strstr 和 find 都是用于查找子串的函数,但它们来自不同的库,使用方式、返回值和适用场景有所不同。

 所属库和适用对象

函数所属库适用对象
strstrC 标准库 (<cstring>)C 风格字符串 (char* 或 const char*)
findC++ 标准库 (<string>)C++ std::string 类

strstr 是 C 语言函数,用于处理以 \0 结尾的字符数组(C 字符串)。

find 是 C++ std::string 的成员函数,用于操作 std::string 对象。


strstr

参数haystack被搜索的主字符串。

    needle要查找的子串。

返回值:如果找到子串,返回子串首次出现的地址(指针)。如果没找到,返回 NULL

示例:

输出:Found at position: 7 

解释上面的代码:

char * result = strstr(s1,s2):在s1字符串中找s2字符串第一次出现的位置,并返回该地址。用指针 result 接收。

result-s1:作用是计算子串在主串中的索引位置(即第几个字符开始),s1 和 result 都是 const char* 类型(字符指针),它们的减法运算表示两个指针之间的偏移量(即相隔多少个 char 元素)。上述代码:result=&s1[7]    s1=&s1[0]     result-s1=7。

!!!如果直接输出result,会直接打印内存地址,即s1[7]的地址。


find

参数str 或 s:要查找的子串(可以是 std::string 或 C 风格字符串)。

    pos(可选):从哪个位置开始查找(默认从头开始,即0)。

返回值:如果找到子串,返回子串首次出现的索引位置size_t 类型)。如果没找到,返回 std::string::npos(一个特殊常量,通常是 -1 或最大无符号数)。

示例:

Found at position: 7 

!!!find直接返回索引位置。用size_t类型接收。

!!!是否是子串判断时使用  std::string::npos。


总结

特性strstr (C)find (C++)
适用对象char*(C 风格字符串)std::string(C++ 字符串)
返回值返回指针(地址)返回索引(size_t
未找到返回值NULLstd::string::npos
安全性可能越界(无边界检查)更安全(自动管理长度)
性能稍快(直接操作内存)稍慢(封装了额外逻辑)

 如何选择?推荐优先使用 find,除非必须处理 C 风格字符串或追求极致性能。

用 strstr

处理 C 风格字符串(如 char[] 或 char*)。

需要高性能(如嵌入式系统或底层代码)。

用 find

使用 C++ std::string

需要更安全的字符串操作(避免缓冲区溢出)。

需要直接获取子串位置(索引比指针更直观)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值