算法模板
int KMP(char *str,char *pat)
{
int i,j;
int next[100];
memset(next,-1,sizeof(next));
for(i=1;pat[i];++i)
{
for(j=next[i-1];j>=0&&pat[i]!=pat[j+1];j=next[j]);
if(pat[j+1]==pat[i])next[i]=j+1;
}
i=j=0;
while(str[i]&&pat[j])
{
if(pat[j]==str[i])i++,j++;
else if(!j)++i;
else j=next[j-1]+1;
}
return (pat[j])?-1:i-j;
}