朴素的模式匹配算法

最近在研究数据结构,看了<<大话数据结构>>的参考书.对于朴素的模式匹配算法书中的给的代码不是很能理解,于是自己实现了一个,对于朴素的模式匹配算法这里不在赘述,直接附上代码,将会在代码中展示书中区别,没太能明白?

#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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值