编译没错 可是啥都运行不出来
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void prefix_table(char pattern[],int prefix[],int n){
prefix[0]=0;
int len=0;
int i=1;
while(i<n){
if(pattern[i]==pattern[len]){
len++;
prefix[i]=len;
i++;
}
else{
if(len>0){
len=prefix[len-1];}
else{
prefix[i]=len;
i++;
}
}
}
}
void moveprefix_table(int prefix[],int n){
int i;
for(i=n-1;i>0;i--){
prefix[i]=prefix[i-1];
}prefix[0]=-1;
}
void kmp_search(char text[],char pattern[]){
int i=0;
int j=0;
int n=strlen(pattern);
int m=strlen(text);
int*prefix=malloc(sizeof(int)*n);
prefix_table(pattern,prefix,n);
moveprefix_table(prefix,n);
while(i<m){
if(i==n-1&&text[i]==pattern[j]){
printf("found pattern at %d",i-j);
j=prefix[j];}
if(pattern[j]=text[i]){
i++;j++;
}
else{
j=prefix[j];
if(j==-1){
i++;j++;
}
}
}
}
int main(){
char pattern[]="ABABCABAA";
char text[]="ABABABCABAABABA";
kmp_search(text,pattern);
return 0;
}