zoukankan      html  css  js  c++  java
  • 字符串搜索(strStr)--- C++版

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

    编译运行:

    下面分析下流程:

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

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

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

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

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

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

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

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

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

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

      e、index++=1;

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

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

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

      c、*p2 == ''条件为假,执行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 = &''、p2 = &'',已经到了字符串结尾处了;

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

        

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

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

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

  • 相关阅读:
    docker 原理之 mount namespace(下)
    docker 原理之 namespace (上)
    十种世界顶级思维方式
    Go 标准库 net
    斐波拉契序列的 Go 实现
    channel 是怎么走上死锁这条路的
    hello world 的并发实现
    使用链表和切片实现栈和队列
    非暴力沟通-读后感
    CCS
  • 原文地址:https://www.cnblogs.com/webor2006/p/7218827.html
Copyright © 2011-2022 走看看