模式匹配算法,KMP
#include <stdio.h>
void get_next(char* T, int *next)
{
int i = 1;
int j = 0;
next[1]=0;
while(i < T[0])
{
if(j == 0 || T[i]==T[j])
{
++i;++j;
if(T[i] != T[j])
next[i]=j;
else
next[i] = next[j];
}else{
j = next[j];
}
}
}
int kmp(char* S, char* T, int pos)
{
int i = pos;
int j = 1;
int next[T[0]];
get_next(T, next);
while(i <= S[0] && j <= T[0])
{
if( j== 0 || S[i] == T[j])
{
++i;++j;
}else
j = next[j];
}
if( j > T[0])
return i-T[0];
else
return 0;
}
int main()
{
char s[255] = " I love China!";
char t[255] = " love";
s[0] = 19;
t[0] = 4;
int res = kmp(s,t,1);
printf("%d\n",res);
return 0;
}