KMP算法C代码描述

原创 2005年05月06日 20:35:00

/*

 *作者JunyiSun @ CCNU

 *E-MAIL:CCNUSJY@GMAIL.COM

 *KMP算法C代码描述

*/

 

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define MAX_S 101      /*主串的长度最大值为100*/

#define MAX_P 21 /*模式串的长度最大值为20*/

 

char s[MAX_S],p[MAX_P];  /*s为主串,p为模式串*/

int nextv[MAX_P]; /*pnextv数组*/

 

void init_nextv()

{

       int i=0,j=-1;

       int p_len; /*模式串的长度*/

       p_len=strlen(p);

       nextv[0]=-1;

       while(i<p_len-1){

              if(j==-1 || p[i]==p[j]){

                     ++i;++j;

                     if(p[i]!=p[j])nextv[i]=j;

                     else nextv[i]=nextv[j];

              }

              else j=nextv[j];

       }

}

 

int kmp()

{

       int i=0,j=0,s_len,p_len;

       s_len=strlen(s);

       p_len=strlen(p);

       while(i<s_len && j<p_len){

              if(j==-1 || s[i]==p[j]){

                     i++;j++;

              }

              else j=nextv[j];

       }

       if(j==p_len)return i-p_len;

       else return -1;

}

 

 

int main()

{

       int index=0;

       printf("请输入主串:");

       scanf("%s",s);

       printf("请输入子串:");

       scanf("%s",p);

       init_nextv();

       index=kmp();

       if(index!=-1)

              printf("匹配成功,匹配位置%d/n",index);

       else

              printf("匹配失败/n");

       system("pause");

       return 0;

}

 

KMP算法C代码实现

一、初识KMP     理解KMP算法需要关注2个问题:(请注意:字符串下标从0开始。)     当i指针与j指针失配时:     1、当母串和模式串不匹配时,i指针为什么不需要回溯...

KMP算法实现字符串的模式匹配完整C代码

#include #include typedef char Elemtype; //生成前缀的长度 void GenPreFix( Elemtype *Pattern, int *PreFix ...

KMP算法的理解,伪代码,c代码实现

1、字符串问题形式化定义:假设文本是一个长度为n的T[1..n],而模式是一个长度为m的数组P[1..m],其中m 2、方法:首先基于模式进行预处理,然后找到所有有效偏移(匹配)。 几种方法的预处...

KMP算法C 代码代码实现

最近做了一道题是叫写出一个字符串的nextval数组,其实我是知道next数组的含义的,上网搜了一下很着急,因为全部都在讲怎么求nextval和next数组,却没有一个讲清楚了nextval究竟是个什...

kmp算法代码

  • 2014年06月28日 13:08
  • 2KB
  • 下载

KMP算法代码

  • 2016年09月12日 16:14
  • 3.42MB
  • 下载

KMP算法--C/C++

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配...

kmp算法的java代码

  • 2016年12月08日 18:01
  • 2KB
  • 下载

KMP算法之代码

  • 2012年02月07日 08:07
  • 2KB
  • 下载

【HDU1686】Oulipo 思路+解题报告+代码+KMP算法个人理解 【0.5%达成】

HDU的题意就是,给你一个字符串A,一个字符串B,求A在B中总共出现了几次,注意,重复的也算。 比如说 str1 = "ABA" str2 = "ABABABA" 这样的话,那么str1就在s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KMP算法C代码描述
举报原因:
原因补充:

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