#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{ char *ch;
int length;
}HString;
void StrAssign(HString &T,char chars[]);
int get_next(HString T,int next[]);
void main()
{ HString T;
char chars[80];
int i,n,next[80];
printf("Please input the string:");
gets(chars);
StrAssign(T,chars);
n=get_next(T,next);
for(i=1;i<=n;i++)
printf("%d",next[i]);
printf("\n");
}
void StrAssign(HString &T,char chars[])
{ char c[80];
int i,j,k;
for(k=0;*chars;k++,chars++)
c[k]=*chars;
for(i=0;i<k;i++);
if(!i)
{ T.ch=NULL;
T.length=0;
}
else
{ if(!(T.ch=(char *)malloc(i*sizeof(char))))
{ printf("ERROR!\n");
return;
}
for(j=1;j<=i;j++)
T.ch[j]=c[j-1];
T.length=i;
}
}
int get_next(HString T,int next[])
{ int i=1,j=0,count=1;
next[1]=0;
while(i<T.length)
{ if(j==0||T.ch[i]==T.ch[j])
{ i++;
j++;
next[i]=j;
count++;
}
else
j=next[j];
}
return count;
}
模式匹配 KMP算法中Next值求解
最新推荐文章于 2022-07-12 11:01:27 发布