69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <math.h>
void getnext(char t[],int next[])
{
int j,k;
j=0;
k=-1;
next[0] = -1;
int d=strlen(t);//这里转换为有符号数
while(j < d-1){
if (k == -1||t[j] == t[k]){
j++;
k++;
next[j]=k;
}
else{
k=next[k];
}
}
}
void KMPIndex(char t[],char s[],int next[])
{
int i,j;
i=0,j=0;
while(i<(int)(strlen(s)) && j<(int)(strlen(t))){ //问题所在
//strlen返回的是一个无符号整形数,不能和有符号数直接做运算比较
if(j == -1 || s[i]==t[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>=(int)strlen(t)){
printf("%d",i-(int)strlen(t));
}
else printf("ERROR");
}
int main()
{
char t[101],s[1001];
int next[100];
scanf("%s %s",s,t);
getnext(t,next);
KMPIndex(t,s,next);
return 0;
}