#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值求解
时间: 2024-10-08 06:36:19