zhuaaaaaazhu 2017-04-12 15:40 采纳率: 33.3%
浏览 953

我感觉非常奇怪不能理解,请大神帮忙看看

C语言一个非常奇怪的问题。大神们来看看。。。
//下面是我写的测试KMP算法的程序。问题在KMP算法注释中。。。。。。。。。
#include
#include
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;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-04-12 15:42
    关注

    else j=next[j];
    j并非单一递增,所以!=和<并不等价

    评论

报告相同问题?

悬赏问题

  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?