回 帖 发 新 帖 刷新版面

主题:关于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");
}

书上的算法是简单,但刚开始不太理解,所以自己按定义做了一个,但结果不对,能帮忙看一下吗?

回复列表 (共1个回复)

沙发

这个,你搞得太复杂了。还真是不好给你改啊,呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册