#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#define MAX 256
void getNext(const char * t,int * Next)//get the Next array
{
int k=-1;
int j=0;
int size=strlen(t);
Next[0]=-1;
while(j<size)
{
if(k==-1||t[j]==t[k])//if k==-1 there are two conditions
//one is this is the first time entering the loop
{ //if t[j]==t[k] get the next[j+1] directly
k++;//the other is the end of the iteration cos k==-1;
j++;
Next[j]=k;//whatever Next[j]=k
}
else
k=Next[k];
}
}
int kmp(const char * Dest,const char *subStr)//find the starting position of the sub
{ //in the Dest through KMP
int destSize=strlen(Dest);
int subSize=strlen(subStr);
int i,j;
int Next[MAX];
i=j=0;
assert((Dest!=NULL)&&(subStr!=NULL));
getNext(subStr,Next);
while(i<destSize&&j<subSize)
{
if(j==-1||Dest[i]==subStr[j])//if j==-1 the main string need match the next elements
{ //and the subString begin from the beginning
i++; //if Dest[i]==subStr[j] both string need shift to the
j++; // next elements
}
else
j=Next[j]; //if match fail,glide back to Next[j]
}
if(j==subSize)return i-j;
return -1;
}
int main()
{
char Dest[]="ssdfdsskdjfkds";//to store the substring to be matched
char sub[]="fffff";
printf("the starting position is :%d\n",kmp(Dest,sub));//get the starting position
getchar();
getchar();
return 0;
}
分享到:
相关推荐
在这个名为“kmp算法--VC6.0”的压缩包中,可能包含了使用C++编程语言在Visual C++ 6.0环境下实现KMP算法的源代码和相关示例。VC6.0是Microsoft公司早期的一款集成开发环境,虽然现在已经有些过时,但仍然被许多...
《OpenMP实现KMP算法详解》 在计算机科学领域,字符串匹配算法是处理文本数据时不可或缺的一部分,其中KMP(Knuth-Morris-Pratt)算法因其高效性和简洁性而备受推崇。本教程将深入探讨KMP算法,并重点介绍如何利用...
《C语言实现KMP算法详解》 KMP(Knuth-Morris-Pratt)算法是一种在文本串中高效地查找模式串(子串)的字符串匹配算法,由D.E. Knuth、V.R. Morris和J.H. Pratt三位学者于1970年提出。在C语言中实现KMP算法,可以...
- KMP算法的关键在于构造一个部分匹配表(也称为失配表),它记录了当模式串在某个位置不匹配时,如何利用已知的信息避免回溯。部分匹配表通常用数组`lps`表示,其中`lps[i]`表示以字符`i`结尾的最长前后缀和后缀...
《基于CUDA实现KMP算法详解》 KMP(Knuth-Morris-Pratt)算法是一种在文本串中寻找模式串的高效字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt共同提出。它的核心思想是利用已知的模式串部分...
《深入理解KMP算法及其Rust实现》 KMP(Knuth-Morris-Pratt)算法是一种在文本中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位科学家共同提出。它避免了对已匹配部分的重复...
将KMP算法用Haskell实现,可以充分利用其特性来编写高效的代码。 KMP算法的核心在于构造一个部分匹配表(也称为“失败函数”或“跳跃表”),它记录了在模式串中已匹配的部分在遇到不匹配字符时应该如何调整。部分...
《C语言实现的KMP算法详解》 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E.Knuth、V.R.Morris和J.H.Pratt三位学者于1977年提出。在计算机科学中,字符串匹配是查找一个字符串(模式)在另一个...
**KMP算法** KMP(Knuth-Morris-Pratt)算法是一种在字符串中查找子串的高效算法,由D.E. Knuth、V. Morris和J.H. Pratt于1970年提出。该算法避免了在字符串匹配过程中不必要的回溯,极大地提高了效率。在Python中...
本毕业设计聚焦于三种经典的字符串匹配算法:RK算法、KMP算法和朴素算法,并用C#编程语言实现了它们,通过对比分析来展示各自的特点和效率。 首先,我们来详细了解这三种算法: 1. **RK算法**(Rabin-Karp ...
《KMP算法与Java实现详解》 在计算机科学中,字符串搜索算法是处理文本和数据的重要工具,其中KMP(Knuth-Morris-Pratt)算法因其高效性和实用性而备受青睐。KMP算法是由Donald Knuth、Vaughan Pratt和James H. ...
在压缩包中的文件"**kmp算法_基于Python实现的kmp字符串搜索算法**"可能包含了完整的Python代码示例,用于演示如何使用KMP算法进行字符串匹配。通过阅读和理解这段代码,你可以更好地掌握KMP算法的实现细节,并在...
《Python实现KMP算法:模糊文本字符串匹配》 在信息技术领域,字符串匹配是常见的操作,尤其是在文本处理、数据挖掘和搜索引擎优化中。其中,KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,它能有效地...
在C语言中实现KMP算法,可以帮助我们理解算法的核心思想,并能应用于实际的编程任务中。 KMP算法的主要特点是避免了对已匹配部分的重复比较,从而提高了效率。当模式串中出现不匹配时,它不会像朴素算法那样回溯到...
DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法DS串应用--KMP算法
3. **部分匹配表**:KMP算法的核心是部分匹配表(也称为失败函数或前缀后缀表),它记录了模式串中每个位置的最长公共前后缀长度。部分匹配表允许我们在不匹配时跳过已检查的字符,而不需要回溯。 Zig实现KMP算法的...
KMP算法的核心思想是避免对已知不可能产生匹配的字符进行比较,通过构建一个“部分匹配表”(也称为“失败函数”或“跳跃表”),来指导主串与模式串的匹配过程。当在主串中遇到不匹配的情况时,算法能够根据部分...
3.1 KMP算法综述KMP算法是一个非常优秀的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找﹐而不会发生退化,其时间复杂度为o ( mtn)。该算法相对于普通匹配算法的改进在于:每当一趟匹配...
kmp算法 KMP算法是什么? 引用自百度百科: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配...
字符串匹配的KMP算法 KMP算法(Knuth-Morris-Pratt算法)是一种字符串匹配算法,用于在一个字符串中查找另一个字符串的出现位置。该算法以三个发明者命名:Donald Knuth、 Vaughan Pratt和James H. Morris。KMP算法...