上篇中是用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)喽~