kmp算法实现的字符串匹配

原创 2012年03月22日 23:50:19

#include<stdio.h>
#include<malloc.h>
int next[50];
void get_next(char *T,int *next)//求模式串的next数组
{
 int i=1,j=0;
 next[1]=0;//由定义知
 while(i<T[0])
 {
  if(j==0||T[i]==T[j])
  {
   ++i;
   ++j;
   next[i]=j;
  }
  else
  {
   j=next[j];
  }
 }
}
int Index_KMP(char *S,char *T,int pos)
{
 int i=pos;
 int j=1;
 while(i<=S[0]&&j<=T[0])
 {
  if(j==0||S[i]==T[j])
  {
   ++i;
   ++j;
  }
  else
  {
   j=next[j];
  }
 }
 if(j>T[0])
  return i-T[0];
 else
  return 0;
}
int main(int argc,char *argv[])
{
 char *S=(char*)malloc(sizeof(char)*256);
 char *T=(char*)malloc(sizeof(char)*25);
 printf("请输入源字符串的长度\n");
 scanf("%d",&S[0]);//注意不超过255
 printf("请输入源字符串\n");
 scanf("%s",S+1);
 printf("请输入模式串的长度\n");
 scanf("%d",&T[0]);
 printf("请输入模式串\n");
 scanf("%s",T+1);
 get_next(T,next);
 printf("%d\n",Index_KMP(S,T,1));
 return 0;

}

字符串匹配的KMP算法浅析

  • 2014年08月26日 14:51
  • 139KB
  • 下载

字符串匹配KMP算法讲解

  • 2011年06月04日 09:15
  • 43KB
  • 下载

字符串匹配之KMP算法思路、原理与Java实现

问题描述: 判断字符串a是否包含字符串b。我们称a为文本串,b为模式串。比如 [plain] view plaincopy a = bcabcabcabbcabcabca...

字符串匹配的KMP算法

  • 2014年05月29日 14:11
  • 2.02MB
  • 下载

字符串匹配KMP算法

  • 2012年09月03日 13:41
  • 239KB
  • 下载

C语言实现字符串匹配KMP算法

相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 ...

字符串匹配KMP算法C++代码实现

看到了一篇关于《字符串匹配的KMP算法》(见下文)的介绍,地址:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93...

kmp算法实现字符串匹配

今天晚上知道了这个算法,看了后凭记忆理解自己又写了一遍,日后会加上注释和思路...
  • normol
  • normol
  • 2016年10月24日 23:51
  • 170

字符串匹配KMP算法实现

由于KMP算法比较难,所以建议初学者分两个阶段学习。 第一个阶段先理解算法思想,可以参考这篇文章:点击打开链接 第二个阶段,理解算法的具体实现,本文主要讲解这部分,需要注意的地方都在程序里了,自己看吧...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:kmp算法实现的字符串匹配
举报原因:
原因补充:

(最多只允许输入30个字)