| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:C语言一个非常奇怪的问题。大神们来看看。。。
只看楼主 加入收藏
zhuaaaaaa
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2017-3-25
结帖率:66.67%
收藏
 问题点数:0 回复次数:0 
C语言一个非常奇怪的问题。大神们来看看。。。
//下面是我写的测试KMP算法的程序。问题在KMP算法注释中。。。。。。。。。
#include<stdio.h>
#include<string.h>
int next[10]={0};
void findnextal(char *s)
{
    int i=0,k=-1,len;
    len=strlen(s)-1;
    next[0]=-1;
    while(i<len)
    {
        while(k==-1||s[i]==s[k])
        {
            i++;
            k++;
            next[i]=k;
            while(s[i]==s[k])
            {
                next[i]=next[k];
                k=next[i];
            }
        }
        k=next[k];
    }
}
int kmp(char *s,char *p)
{
    int i=0,j=0;

        while(j!=strlen(p)&&i<strlen(s))//为什么把j!=strlen(p)改为j<strlen(p)程序就失效了?
        {
            if(s[i]==p[j]||j==-1)
            {
                i++;
                j++;
            }
            else j=next[j];
        }
        if(j==strlen(p)) return i-strlen(p);
        else return -1;
}
int main()
{
    int i;
    char str[100],s[100];
    printf("input p:\n");
    gets(str);
    findnextal(str);
    for(i=0;i<strlen(str);i++)
    {
        printf("%d  ",next[i]);
    }     
    printf("puts s:\n");
    gets(s);
    printf("%d  ",kmp(s,str));
    return  0;
}
搜索更多相关主题的帖子: include C语言 
2017-04-12 21:54
快速回复:C语言一个非常奇怪的问题。大神们来看看。。。
数据加载中...
 
   



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

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