kmp算法中求模式串next[j]的值以写好,,本帖是今天修改语法错误那贴的重写版,以测试成功。
#include<stdio.h>#include<malloc.h>
//delcare funtion
int strlen(char * p);
void get_next(char *string,int next[]);
void print(char * string,int *next);
void get_char(char * string);
// Main
int main()
{
int next[19];
char string[20];
get_char(string);
get_next(string,next);
print(string,next);
}
//funtion specitices
int strlen(char * p) //calc the length of string ..sure right
{
int i;
for(i=0;*(p+i)!='\0';i++);
return i;
}
void get_next(char *string,int next[])//there are some wrong in this function
{
int i=1,j=0;
next[1]=0;
next[2]=1;
while(i<strlen(string))
{
if(j==0||string[i]==string[j])
{
++i;
++j;
next[i]=j;
}
else
{
j=next[j];
}
}
}
void print(char * string,int *next)
{
int i;
for(i=1;i<strlen(string)-2;i++)
printf("%d ",*(next+i));
}
void get_char(char * string)
{
int m;
gets(string);
m=strlen(string);
for(m;m>=1;m--)
{
string[m]=string[m-1];
}
}