主题:关于NEXT值的计算,请教
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define max 10
int *next_j(char *s,int len)
{
int *n,k,j,t,u;
char *s1,*s2;
n=(int *)malloc(max*sizeof(int));
*(n+1)=0;
*(n+2)=1;
for(j=3;j<=len;j++)
{
k=j-1;
while(k>1)
{
s1=s2=(char *)malloc((k)*sizeof(char));
for(t=0;t<k-1;t++)
*(s1+t)=*(s+t);
for(t=0,u=j-(k-1);u<=j-1;t++,u++)
*(s2+t)=*(s+u);
if (strcmp(s1,s2)==1)
{
*(n+j)=k;
break;
}
else --k;
}
if (k==1)
*(n+j)=1;
}
return(n);
}
void main()
{
char *str,ch;
int *next;
int i=1,j;
printf ("请输入要计算NEXT值的模式串:");
str=(char *)malloc(max*sizeof(char));
while(ch=getchar()!='\n')
{
*(str+i)=ch;
i++;
}
i--;
next=next_j(str,i);
for(j=1;j<=i;j++)
printf ("%d ",*(next+j));
printf("\n");
}
书上的算法是简单,但刚开始不太理解,所以自己按定义做了一个,但结果不对,能帮忙看一下吗?
#include "string.h"
#include "malloc.h"
#define max 10
int *next_j(char *s,int len)
{
int *n,k,j,t,u;
char *s1,*s2;
n=(int *)malloc(max*sizeof(int));
*(n+1)=0;
*(n+2)=1;
for(j=3;j<=len;j++)
{
k=j-1;
while(k>1)
{
s1=s2=(char *)malloc((k)*sizeof(char));
for(t=0;t<k-1;t++)
*(s1+t)=*(s+t);
for(t=0,u=j-(k-1);u<=j-1;t++,u++)
*(s2+t)=*(s+u);
if (strcmp(s1,s2)==1)
{
*(n+j)=k;
break;
}
else --k;
}
if (k==1)
*(n+j)=1;
}
return(n);
}
void main()
{
char *str,ch;
int *next;
int i=1,j;
printf ("请输入要计算NEXT值的模式串:");
str=(char *)malloc(max*sizeof(char));
while(ch=getchar()!='\n')
{
*(str+i)=ch;
i++;
}
i--;
next=next_j(str,i);
for(j=1;j<=i;j++)
printf ("%d ",*(next+j));
printf("\n");
}
书上的算法是简单,但刚开始不太理解,所以自己按定义做了一个,但结果不对,能帮忙看一下吗?