C语言kmp算法简单示例和实现原理探究
本文导语: 以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货。最近有空,翻出来算法导论看看,原来就是这么简单(下不说程序实...
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货。最近有空,翻出来算法导论看看,原来就是这么简单(下不说程序实现,思想很简单)。
模式匹配的经典应用:从一个字符串中找到模式字串的位置。如“abcdef”中“cde”出现在原串第三个位置。从基础看起
朴素的模式匹配算法
A:abcdefg B:cde
首先B从A的第一位开始比较,B++==A++,如果全部成立,返回即可;如果不成立,跳出,从A的第二位开始比较,以此类推。
/*
*侯凯,2014-9-16
*功能:模式匹配
*/
#include
#include
using namespace std;
int index(char *a,char *b)
{
int tarindex = 0;
while(a[tarindex]!='')
{
int tarlen = tarindex;
int patlen;
for(patlen=0;b[patlen]!='';patlen++)
{
if(a[tarlen++]!=b[patlen])
{
break;
}
}
if(b[patlen]=='')
{
return tarindex;
}
tarindex++;
}
return -1;
}
int main()
{
char *a = "abcdef";
char *b = "cdf";
cout