字符串搜索(strStr)--- C++版

上篇中是用JAVA实现的字符串搜索算法, 这次改用C++来实现,当然在C++就没有像JAVA那样方便的API可以很简便的实现了,其思想跟上篇类似,直接上具体实现代码:

编译运行:

下面分析下流程:

还是以这个用例进行分析:

其中参数str1="abcde",str2="cde":

①、,条件为假,继续执行②;

②、,条件为假,像这种case实际就是会走这个条件:
  

③、,p = str = "abcde";index = 0;其中index表示找到的字串在原字串的位置下标。

④、,开始循环进行字串对比,由于字串在C++中会以'\0'结尾,所以可以做为循环条件的终止条件,具体过程如下:
  *p=&'a',字符串还未结束,所以循环条件为真,执行循环体Loop1:

  a、p1 = &'a', p2 = &'c';

  b、循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为假,则直接退出while循环,执行c;

  c、*p2 == '\0'条件为假,执行d;

  d、p++,这时p指向下一个字串'b';

  e、index++=1;

 

  *p=&'b',字符串还未结束,所以循环条件为真,执行循环体Loop2:

  a、p1 = &'b', p2 = &'c';

  b、循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为假,则直接退出while循环,执行c;

  c、*p2 == '\0'条件为假,执行d;

  d、p++,这时p指向下一个字串'c';

  e、index++=2;

 

  *p=&'c',字符串还未结束,所以循环条件为真,执行循环体Loop3:

  a、p1 = &'c', p2 = &'c';

  b、循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为直,则执行循环体Loop1:

    p1++、p2++,这时p1 = &'d'、p2 = &'d';

    

    循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为直,则执行循环体Loop2:

    p1++、p2++,这时p1 = &'e'、p2 = &'e';

 

    

    循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为直,则执行循环体Loop3:

    p1++、p2++,这时p1 = &'\0'、p2 = &'\0',已经到了字符串结尾处了;

 

    循环条件中判断p1所指向的字串是否等于p2指向的字串,并且两者不为空字符,条件为假,则直接退出while循环,执行c;

    

  c、*p2 == '\0'条件为真,执行条件体,将查找到的字串的位置index=2返回,成功找到~

⑤、如果没找到则返回-1。

发现其思路跟JAVA实现的类似,只是形式不一样而已,所以它的时间复杂度也是O(m * n)喽~

转载于:https://www.cnblogs.com/webor2006/p/7218827.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值