C/C++库函数strstr和find实现子字符串查找

1 子字符串查找实现Demo

#include<iostream>
#include<string>
#include<cstring>
using namespace std;

int main()
{
    char a[] = "abcddabc";
    char b[] = "dda";
    int j;
    string str1(a);
    string str2(b);
    //方法一
    int i = str1.find(str2);  //返回即子字符串索引3
    //方法二
    char *rel = strstr(a, b); //首次出现地址,strstr保存的是ddabc
    if (rel != NULL)
        j = rel -a;         //根据返回子字符串匹配结果输出索引位

    return 0;
}

2 子字符串查找之字符串数组strstr

  上面实现子字符串查找主要利用两个库函数方法,第一个是字符串数组(char*)实现,string.h或者cstring头文件中strstr函数。第一个参数是主字符串,第二个参数是子字符串,如果存在返回首次出现的地址,所以需要利用一个字符串指针获取结果(切记:返回非直接索引位!);否则,返回NULL。
  我们看看出现地址怎么转换到索引位,如下:

    if (rel != NULL)
        j = rel -a;         

  我们知道char类型地址分配为1个字节,rel指向的是查找到子串在主字符串中的地址(例如:0x23544203),而a是主字符串的首地址(例如:0x23544200),两者差值正好就是索引位。

3 子字符串查找之字符串string的find方法

  string头文件中find函数就是在主字符串中查找子字符串的索引。

int i = str1.find(str2);  //返回即子字符串索引3

4 其它说明

  子字符串查找如果手写,有暴力方法,KMP算法等等,想详细了解请查阅以下链接:

http://blog.csdn.net/fx677588/article/details/53406327

  至于string头文件与cstring头文件的区别,请查看下文链接:

http://blog.csdn.net/fx677588/article/details/53102634
http://blog.csdn.net/fx677588/article/details/53033653


  个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

  转载请注明出处:http://blog.csdn.net/FX677588/article/details/70734291

  • 21
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值