kmp看不懂啊!先放着再说!
#include<stdio.h>
#include<string.h>
int next[10001];
void make_next(char sstr[],int ls)
{
next[0]=-1;
int j=0;int k=-1;
while(j<ls-1)
{
if(k==-1||sstr[j]==sstr[k])
{j++;k++;next[j]=k;}
else
k=next[k];
}
}
int find_substr(char mstr[],int lm,char sstr[],int ls)
{
int rst=-1;
make_next(sstr,ls);
int i,j,n;i=j=n=0;
while(i<lm)
{
n++;
if(mstr[i]==sstr[j]||j==-1)
{i++;j++;}
else j=next[j];
if(j==ls)
{rst=i-ls;break;}
}
return rst;
}
int main()
{
char mstr[20];char sstr[4];
scanf("%s%s",mstr,sstr);
printf("位置在%d!\n",find_substr(mstr,strlen(mstr),sstr,strlen(sstr)));
return 1;
}