/*
description:
字符串匹配 KMP算法
<<编程之法>> P134
author: JasonZhou
date: 2016-03-29
*/
#include<iostream>
#include <string>
using namespace std;
void calculate_next(string p,int next[])
{
int len=p.length();
int k= -1,j=0;
next[0]=-1;
while(j < (len-1))
{
if(k == -1 || p[j] == p[k])
{
++k;
++j;
next[j]=k;
}
else
{
k = next[k];
}
}
}
int KmpSearch(string s1,string s2,int next[])
{
int i=0;
int j=0;
int len1=s1.length();
int len2=s2.length();
while (i<len1 && j<len2)
{
if (j== -1 || s1[i]==s2[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if (j==len2)
{
return i-j;
}
else
{
return -1;
}
}
int main()
{
//原字符串
string s1="jadfasjfabcdabdabcjdafjakf";
//要匹配的字符串
string s2="abcdabdabc";
int next[10]={0};
calculate_next(s2,next);
cout<<"----next array----"<<endl;
for (int i=0;i<10;i++)
{
cout<<next[i]<<" ";
}
cout<<endl;
int point=KmpSearch(s1,s2,next);
cout<<"---search---"<<endl;
cout<<s1<<endl;
for (int j=0;j<point;j++)
{
cout<<" ";
}
cout<<s2<<endl;
cout<<"在原字符串匹配成功的位置:";
cout<<point<<endl;
return 0;
}
字符串匹配 KMP算法
最新推荐文章于 2021-04-20 15:16:02 发布