字符串搜索(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)喽~
字符串搜索(strStr)--- C++版的更多相关文章
- Linux常用命令学习2---(文件搜索命令locate find、命令搜索命令whereis which、字符串搜索命令grep、帮助命令man)
1.文件搜索命令:locate [文件名] 在后台数据库中按文件名搜索,搜索速度比find快,耗费资源更少 例子:locate test.txt,就会显示文件名包含 test.txt的所 ...
- 【ToolGood.Words】之【StringSearch】字符串搜索——基于BFS算法
字符串搜索中,BFS算法很巧妙,个人认为BFS算法效率是最高的. [StringSearch]就是根据BFS算法并优化. 使用方法: string s = "中国|国人|zg人|fuck|a ...
- C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出
C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出 strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能: ...
- C#下利用正则表达式实现字符串搜索功能的方法(转)
关键字:正则表达式.元字符.字符串.匹配: 1.正则表达式简介:正则表达式提供了功能强大.灵活而又高效的方法来处:.NET框架正则表达式并入了其他正则表达式实现的: 2.字符串搜索:正则表达式语言由两 ...
- Windows和linux环境下按文件名和字符串搜索命令
Windows 1.遍历C盘下所有txt 命令:for /r c:\ %i in (*.txt) do @echo %i 注释:for 循环的意思 /r 按照路径搜索 c:\ 路径 %i in ( ...
- (九)Centos之搜索命令whereis、which和字符串搜索命令grep
一.Centos之命令搜索命令whereis与which 1.1 whereis 命令名(搜索命令所在路径及帮助文档所在位置) 选项: -b :只查找可执行文件位置 -m:只查找帮助文件 1.2 wh ...
- Trie——解决字符串搜索、异或最值问题
Trie--解决字符串搜索.异或最值问题 在说到Trie之前,我们设想如下问题: 给我们1e5个由小写字母构成的不重复的字符串,每个字符串长度不超过6,之后是1e5次查询操作,每次给我们一个字符串,要 ...
- 字符串搜索(strStr)--- java版
这里来学习一下从一个源字符串中搜索指定的字符串,有些啰嗦,直接看最终的效果: 实际上JAVA SDK中相当于String.indexOf()方法,上面的用例改用JAVA SDK来实现看一下: 编译运行 ...
- Substrings 子字符串-----搜索
Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...
随机推荐
- NDK学习笔记-文件的拆分与合并
文件的拆分与合并在开发中经常会用到,上传或是下载的时候都有这样的运用 文件拆分的思路 将文件大小拆分为n个文件 那么,每个文件的大小就是等大小的 如果文件大小被n除不尽,那么就使用n+1个文件来拆分 ...
- vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token <" 报错
参考链接:https://segmentfault.com/a/1190000016919340
- 洛谷P3381 最小费用最大流模板
https://www.luogu.org/problem/P3381 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用 ...
- Python re 模块findall() 函数返回值展现方式详解
findall 函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表. 注意: match 和 search 是匹配一次 findall 匹配所有,mat ...
- Numpy学习之——数组创建
Numpy学习之--数组创建 过程展示 import numpy as np a = np.array([2,3,9]) a array([2, 3, 9]) a.dtype dtype('int32 ...
- 测试常用__linux命令
1.显示目录和文件的命令 Ls:用于查看所有文件夹的命令. Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 2.修改目录,文件权限和属主及数组命令 ...
- maven中添加memcached.jar配置方法
一.java memcached client的jar包下载地址:https://github.com/gwhalin/Memcached-Java-Client/downloads 二.cd jav ...
- github骚操作
限制搜索 in关键词限制搜索范围 命令 说明 xxx in:name 项目名包含xxx的 xxx in:description 项目描述包含xxx的 xxx in:readme 项目的readme文件 ...
- Matlab函数kmeans
Matlab函数kmeans K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Km ...
- 【ES6 】ES6 字符串扩展及新增方法
模板字符串 传统写法 var str = 'There are <b>' + basket.count + '</b> ' + 'items in your basket, ' ...