鱼C论坛

 找回密码
 立即注册
查看: 2088|回复: 2

模式串匹配的next输出遇到问题

[复制链接]
发表于 2012-4-26 23:01:03 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
#include<string.h>
#define maxstrlen 20
void qwe(char T[],char* chars)//字符串的复制,从第二个位置复制,第一个位置用来存储长度
{
int i,len;
len = strlen(chars);


for(i = 1; i <= len ; i++)
{
T[i] = chars[i-1];
}
T[0] = len;

//T[i] = '\0';


}
int indexkmp(char s[],char t[],int next[])//kmp算法
{
   int i=1,j=1;
   //printf("%d%d",s[0],t[0]);
   while(i<=s[0]&&j<=t[0])
   {
           if(j==0||s[i]==t[j])
           {++i;++j;}
           else j=next[j];
   }
   if(j>t[0]) return (i-t[0]);
   else return 0;
}
void getnext(char t[],int next[])//next数组的获得
{
        int i=1;next[1]=0;int j=0;
        while(i<t[0])
        {
                if(j==0||t[i]==t[j])
                {++i;++j;next[i]=j;}
                else j=next[j];
        }
}
void main()
{
        char S[21];
        char T[21];
        int next[maxstrlen];
        for(int i=0;i<maxstrlen;i++)
                next[i]=0;
        char s[maxstrlen];
        printf("输入主串s:\n");
        gets(s);
        //int slen=strlen(s);
        char t[maxstrlen];
        printf("输入模式串t:\n");
        gets(t);
        //int tlen=strlen(t);
        qwe(T,t);
        qwe(S,s);
        getnext(T,next);
        printf("输出模式串t的next[]:\n");
        for(int j=1;j<=t[0];j++)//next的输出
                printf("%d",next[j]);
        printf("\n");
        printf("结果:\n");
        int x=indexkmp(S,T,next);
        if(x!=0)       
        printf("在主串位置%d匹配\n",x);
        else
                printf("模式串匹配失败");
       

}
next函数输出的是一大堆的东西,看懵了,求大虾指点

最佳答案

查看完整内容

说也不好说。 推荐你看严蔚敏的数据结构关于这节。 讲的很细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-26 23:01:04 | 显示全部楼层
说也不好说。
推荐你看严蔚敏的数据结构关于这节。 讲的很细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-30 23:52:23 | 显示全部楼层

你可以再我那边改一下行么,让next可以输出正确的值就好,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-26 07:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表