| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1185 人关注过本帖
标题:我的KMP错在哪里呢
只看楼主 加入收藏
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
 问题点数:0 回复次数:13 
我的KMP错在哪里呢
写kmp有个疑问

#include <iostream>
using namespace std;

void get_next(char *c,int *i);
int Index_KMP(char* s,char* T,int pos);

int main()
{
char c[100],d[100];
int b[100];
scanf("%s %s",c,d);
int i,j;
i=Index_KMP(c,d,1);
printf("i=%d\n",i);
return 0;
}

void get_next(char *c,int *next)
{
int i,len,j;
next[0]=-1;
i=0;
j=-1;
len=strlen(c);
while(i<len-1)
{
if(j==-1||c[i]==c[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}

int Index_KMP(char* s,char* T,int pos)
{
int j=0,i=0,*p;
p=new int[strlen(T)];
get_next(T,p);
j=0;
while((j!=strlen(T))&&(i!=strlen(s)))
//while((j<strlen(T))&&(i<strlen(s)))
{
if(j==-1)
{
i++;
j++;
}
else if(T[j]==s[i])
{
i++;
j++;
}
else
j=p[j];
}
if(j==strlen(T))
return i-strlen(T)+1;
return -1;
}

为什么用第二个while 会发生错误啊 希望有人可以看看

搜索更多相关主题的帖子: KMP 
2007-10-12 19:10
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
感觉上没错

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-12 19:18
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 
回复:(永夜的极光)感觉上没错

可是运行的时候就错了啊

2007-10-12 19:19
yrj007
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2007-3-17
收藏
得分:0 
我用DEV运行没错

2007-10-12 19:22
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 

啊。是如果用红色的子的那个句子就会出错了。上边的代码是我改对了。我不知道这两个句子有什么不同。
我是在VS2005的环境下的

2007-10-12 21:21
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
是结果错了还是运行提示错误?

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-10-12 21:26
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
问一下````什么是KMP```


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-10-12 22:17
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 

是结果不对啊。无论输入什么东西。都返回-1

2007-10-12 23:19
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
回复:(死了都要C)问一下````什么是KMP```
KMP是串模式匹的一种算法,详见数据结构

[此贴子已经被作者于2007-10-12 23:50:45编辑过]



偶学编程,也许本身就是一个错。。。
2007-10-12 23:27
coachard
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:1251
专家分:0
注 册:2007-8-12
收藏
得分:0 
我好久以前写的,你对比下(下标从1开始):

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
/*KMP*/
int *nextVal;
int main(void)
{
char strS[50],strT[50];
int i,j;
int strSLength,strTLength;
printf("Please input string S:");
gets(strS+1); //input strS
printf("Please input string T:");
gets(strT+1);
strSLength=strlen(strS+1);
strTLength=strlen(strT+1);
/*get nextVal*/
nextVal=(int *)malloc(strTLength+sizeof(int)); //malloc memory for nextVal
i=1;
nextVal[1]=0;
j=0;
while(i<strTLength)
{
if(j==0 || strT[i]==strT[j])
{
++i;
++j;
if(strT[i]!=strT[j]) nextVal[i]=j;
else nextVal[i]=nextVal[j];
}
else j=nextVal[j];
}
/*end nextVal*/
i=1; //begin with the first char in strT
j=1;
while(i<=strSLength && j<=strTLength)
{
if(j==0 || strS[i]==strT[j])
{
i++;
j++;
}
else j=nextVal[j];
}
free(nextVal);
if(j>strTLength) printf("The fit model in first place is %d.\n",i-strTLength);
else printf("Sorry cannot find the fit model.\n");
getch();
return 0;
}//end main

PS:你的代码menmory leak

偶学编程,也许本身就是一个错。。。
2007-10-13 09:14
快速回复:我的KMP错在哪里呢
数据加载中...
 
   



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

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