/*KMP模式匹配算法*/
#include<stdio.h>
#define MAXSIZE 100
typedef unsigned char sstring[MAXSIZE+1];
/*求一个串中next[j]的函数*/
void get_next(sstring t,int next[])
{
int i=1,j=0;
next[1]=0;
while(i<t[0])
{
if(j==0||t[i]==t[j]){++i;++j;next[i]=j;}
else j=next[j];
}
}
/*KMP模式匹配算法查找子串在主串中的位置的函数*/
int index_kmp(sstring s,sstring t,int pos)
{
int next[100];
int i,j;
i=pos;
j=1;
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;
}
void main()
{
int i;
sstring s={17,'a','c','a','b','a','a','b','a','a','b','c','a','c','a','a','b','c'};
sstring t={8,'a','b','a','a','b','c','a','c'};
i=index_kmp(s,t,0);
printf("the suited position is:%d/n",i);
}