标题:kmp算法。有没有大佬看看哪里错了。谢谢
只看楼主
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
结帖率:100%
已结贴  问题点数:70 回复次数:2 
kmp算法。有没有大佬看看哪里错了。谢谢
#include<stdio.h>//函数中的参数数组和指针还是有点区别的。
#include<string.h>
void Next(char ch[],int next[]){
    int i=1,j=0;
    next[1]=0;
    int lenth=strlen(ch);
    while(i<=lenth){
        if(0==j || ch[j]==ch[i]){
            i++;
            j++;
            next[i]=j;
        }else
            j=next[j];
    }
}
int Index_kmp(char S[],char T[],int pos,int next[]){
    int i=pos;
    int j=1;//此时的等于一是从下标为一的位置开始的。
    int lenS=strlen(S);
    int lenT=strlen(T);
    while(j<=lenS && i<=lenT){
        if(0==j || S[j]==T[i]){//此时0==j是一个界限,必须有。
            ++i;
            ++j;
        }else
            j=next[j];
    }
    if(j>lenS)
        return (i-lenS);//为什么是返回值这样的因为可以准确返回开始匹配的位置
    else
        return 0;
}
int main(){
    int next[11];
    int i=1;
    char S[]="0aa";//第一个字符用不上,从s[1]='a';开始。
    char T[]="01a0aabcdabcadddfljlf";
    Next(S,next);
    printf("%d",Index_kmp(S,T,i,next));
    printf("hahahahhahahah");
}
搜索更多相关主题的帖子: kmp Next char int strlen 
2019-05-10 14:08
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:70 
程序代码:
#include<stdio.h>
#include<string.h>

void Next(char ch[],int next[])
{
    int i=2,j=0;
    next[1]=0;
    next[0]=-1;
    int lenth=strlen(ch);
    while(i<lenth)
    {
       if(ch[i-1]==ch[j])
            next[i++]=++j;
       else if(j>0)
            j=next[j];
       else
            next[i++]=0;

    }
}

int Index_kmp(char S[],char T[],int pos,int next[])
{
    int i=pos;
    int j=1;
    int lenS=strlen(S);
    int lenT=strlen(T);
    while(j<=lenS && i<=lenT)
    {
        if(0==j || S[j]==T[i])
        {//此时0==j是一个界限,必须有。
            ++i;
            ++j;
        }
        else
            j=next[j];
    }
    if(j>lenS)
        return (i-lenS);//为什么是返回值这样的因为可以准确返回开始匹配的位置
    else
        return 0;
}
int main()
{
    int next[11];
    int i=1;
    char S[]="0aa";
    char T[]="01a0aabcdabcadddfljlf";
    Next(S,next);
    printf("%d\n",Index_kmp(S,T,i,next));
    return 0;
}
2019-05-11 19:03
堕落之地
Rank: 1
等 级:新手上路
帖 子:57
专家分:5
注 册:2019-3-11
得分:0 
回复 2楼 花脸
谢谢大哥,我知道了。原来书上弄错了。我说我怎么没有弄对。谢谢

2019-05-11 22:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494653-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.288358 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved