最近在研究数据结构,看了<<大话数据结构>>的参考书.对于朴素的模式匹配算法书中的给的代码不是很能理解,于是自己实现了一个,对于朴素的模式匹配算法这里不在赘述,直接附上代码,将会在代码中展示书中区别,没太能明白?
#include<string>
3 using namespace std;
4 int Index(string S,string T,int pos){
5 int i=pos;
6 int j=0;
7 while(i<S.length()&&j<T.length()){
8 if(S[i]==T[j]){
9 ++i;
10 ++j;
11 }else{
12 i=i-j+1;
13 j=0;
14 }
15 }
16 /*
17 //书中的代码
18 int Index(String S,String T,int pos)//定义了一个主串,子串,开始查找的位置
19 {
20 int i=pos;//主串的查找位置
21 int j=1;//此处不太理解 为啥其实位置是1,感觉应该是0开始的
22 while(i<=S[0]&&j<=T[0])//这里的作用是不要主串的长队和子串的长度,这个S[0]和T[0]拿到代码里去运行 显示是该位置字符串的位置 后期我给更换了
23 看了书本才知道书中说是假设字符长度直接存在这个里面,不能直接拿到代码里使用
24 if(S[i]==T[j])//判断两个字符串是否相等
25 {
26 ++i;
27 ++j;
28 } else{
29 i=i-j+4;//最不能理解的就是这里了 难道不是加1吗?返回最开始查找的下一个位置,不太明白 在后代码中 我改了 可能是每台能参透作者的意思
30 j=1;//这里是为1,应该是与上面作者的想法有关 我后期把为值改成0了,方便计算
31 }
32 }
33