#include <iostream>
using namespace std;
/**
* paramter pat:待匹配的字符串
* T: 返回的table
*
**/
void kmp_table(const char * W, int T[])
{
int pos = 2; //当前查找的位置
int cnd = 0; //当前查找的前缀字串的位置
T[0] = -1;
T[1] = 0;
while(pos < strlen(W))
{
if( W[cnd] == W[pos-1] )
{
T[pos] = cnd + 1;
pos++;
cnd++;
}
else if( cnd > 0 )
cnd = T[cnd]; //回退,有难度
else
{
T[pos] = 0;
++pos;
}
}
}
int kmp_search(const char * S,const char * W)
{
int m = 0 ; //开始匹配的位置
int i = 0 ; //W中位置
int * T = new int[strlen(W)];
kmp_table(W,T);
for(int j = 0; j < strlen(W); j++)
{
cout << T[j] <<" ";
}
cout<<endl;
while( (m + i) < strlen(S))
{
if(S[m+i] == W[i])
{
++i;
if(i == strlen(W))
return m;
}
else
{
m = m + i - T[i];
if( i > 0) i = T[i];
}
}
}
int main()
{
char * S = "acabaabaabcacaabc";
char * W = "abaabcac";
int p = kmp_search(S,W);
cout<<"p = "<< p <<endl;
}
分享到:
相关推荐
KMP算法实现 KMP算法实现 KMP算法实现 KMP算法实现
用C++语言实现的KMP算法。经过调试。供广大算法学习者参考。
算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP
KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。
数据结构、kmp算法、代码实现、KMP(char *P,char *T,int *N,int start)
KMP算法的实现, 这程序代码是基于KMP算法来实现的,虽然很简单,但是可能也会对你有帮助的
C语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法C语言实现kmp算法的C语言实现源码.zipC语言实现kmp算法的C语言实现源码.zipC语言实现...
模式匹配中的KMP算法的实现 模式匹配是计算机科学领域中的一个研究热点,串的模式匹配算法是其中的一个重要分支。在模式匹配中,KMP算法是一个非常重要的算法,它可以高效地实现串的模式匹配。下面我们将详细介绍...
串的替换,删除,查找 以及KMP算法的具体的实现 c语言 数据结构
数据结构在这里起到了关键作用,因为KMP算法的效率很大程度上取决于如何有效地存储和访问部分匹配表。在实现KMP算法时,我们需要使用数组或链表等数据结构来存储模式串和部分匹配表,同时还需要理解栈和队列等其他...
**KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...
简单的kmp算法实现,代码结构十分清晰,适合初学者理解kmp算法
### 数据结构-KMP算法的实现 #### 一、KMP算法概述 KMP算法是一种高效的字符串匹配算法,它由Donald E. Knuth、James H. Morris以及Vaughan R. Pratt三位学者共同提出,因此得名Knuth-Morris-Pratt算法(简称KMP...
1. **比较Brute-Force算法和KMP算法的比较次数**:编写程序实现这两种算法,并统计它们在处理相同输入时的比较次数,从而直观地比较两者的效率差异。 2. **实现串的替换功能**:编写函数`Replace(S, start, T, V)`,...
KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Morris和Robert Pratt三位学者提出。它的主要目标是在一个长字符串(主串A)中查找是否存在一个指定的短字符串(模式...
在C语言中实现KMP算法,我们需要理解其核心思想和步骤。 1. **KMP算法的核心思想**: - KMP算法的关键在于构造一个部分匹配表(也叫失配表),用于记录当主串与模式串比较时,如果发生不匹配,模式串应如何移动以...
通过本课例设计,学生将了解KMP算法的应用普遍性、实现机制和时间复杂度,并掌握计算next值的方法和判断算法优劣的方法。 一、教学目标 * 让学生了解KMP算法应用的普遍性,如在文字处理软件中的查找和替换操作。 *...
下面我们将详细探讨KMP算法的原理、实现以及C++代码的编写。 ### KMP算法原理 1. **部分匹配表(Partial Match Table)**:KMP算法的核心是构建一个部分匹配表,也称为失配表。这个表记录了在模式串中每次不匹配时...
KMP算法实现,用Java语言实现的KMP字符串匹配算法
JAVA实现KMP算法,使用java语言实现的kmp算法