| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:kmp算法
只看楼主 加入收藏
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
结帖率:94.12%
收藏
已结贴  问题点数:10 回复次数:4 
kmp算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct str
{
  char ch[MAXSIZE];
  int length;
}str;
int Next(str ch)//求next函数
{ int i=1,j=0,next[MAXSIZE];
  next[1]=0;
  while(i<ch.length)
  {
    if(j==0||ch.ch[i]==ch.ch[j])
    {
      i++;
      j++;
      next[i]=j;
    }
    else
    j=next[j];
  }
  return next[i];
}
void enstr(str ch)//输入字符串
{ int i;
  char *p=ch.ch;
  gets(p);
  while(*p)
  {
    i++;
    p++;
  }
  ch.length=i;
}
int kmp(str s,str t,int pos)
{ int i,j=1;
  i=pos;
  while(i<=s.length&&j<=t.length)
  {
    if(j==0||s.ch[i]==t.ch[j])
    {
      i++;
      j++;
    }
    else
    j=Next(t);
  }
  if(j>t.length)
  return i-t.length;
  else
  return 0;
}
main()
{ str s,t;
  int next[MAXSIZE],pos,pos2;
  enstr(s);
  enstr(t);
  scanf("%d",&pos);
  pos2=kmp(s,t,pos);
  printf("%d",pos2);  
}
求高手们看看,改一下错误,谢谢!
搜索更多相关主题的帖子: 算法 kmp 
2010-04-12 19:37
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:3 
i s t 都未初始化
2010-04-12 20:41
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:4 
最起码的函数之间的传递都没搞明白。
问下LZ知道KMP中的next是用来干嘛的么?
2010-04-13 10:35
寻梦飞翔
Rank: 1
等 级:新手上路
帖 子:76
专家分:9
注 册:2010-3-15
收藏
得分:0 
楼上的解释一下……
2010-04-13 20:12
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:3 
LZ确定你的enstr();能给你定义的结构体赋值?
2010-04-13 21:06
快速回复:kmp算法
数据加载中...
 
   



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

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