#include <stdio.h>
#include "String.h"
#define MaxSize 100
void getNext(SqString t, int next[])
{
int j,k;
j = 0;
k = -1;
next[0] = -1;
while(j<t.len-1)
{
if( k == -1 || t.ch[j] == t.ch[k])
{
j++;
k++;
next[j] = k;
if(t.ch[j] != t.ch[k])
next[j] = k;
else
next[j] = next[k];
}
else
k = next[k];
}
for(int i=0;i<MaxSize;i++)
printf("%d ",next[i]);
}
int KMPIndex(SqString s, SqString t)
{
int i =0,j = 0;
int v;
int next[MaxSize];
for(int m=0;m<MaxSize;m++)
next[m] = 0;
getNext(t,next);
while(i<s.len && j<t.len)
{
if(j == -1 || s.ch[i] == t.ch[j])
{
i++;
j++;
}
else
j = next[j];
}
if(j >= t.len)
v = i - t.len;
else
v = -1;
return v;
}
int main(void)
{
SqString s,t;
char s_ch[] = "cdddcdc";
char t_ch[] = "cdc";
StrAssign(s,s_ch); //将字符数组赋给串时,可由'\0'来判断结尾
StrAssign(t,t_ch);
printf("%d",s.len);
printf("%d",KMPIndex(s,t));
return 0;
}
分享到:
相关推荐
《KMP算法与通配符支持在字符串匹配中的应用》 KMP算法,全称Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,它由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者于1977年提出。在计算机科学中,...
KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中高效地查找子串的算法,由D.E. Knuth、V.R. Morris和J.H. Pratt在1970年代提出。这个算法避免了在匹配过程中频繁的回溯,极大地提高了查找效率。在给定的"KMP.rar...
### 数据结果 KMP算法实验报告 #### 实验背景与目的 本实验主要针对《数据结构》课程中的字符串处理部分,具体涉及的是模式匹配算法——KMP算法。通过实验加深学生对串类型及其基本操作的理解,并重点掌握两种重要...
**KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...
KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Morris和Robert Pratt三位学者提出。它的主要目标是在一个长字符串(主串A)中查找是否存在一个指定的短字符串(模式...
《OpenMP实现KMP并行串匹配》 在信息技术领域,字符串匹配算法是核心问题之一,广泛应用于文本处理、搜索引擎、生物信息学等多个领域。KMP(Knuth-Morris-Pratt)算法作为经典的字符串匹配算法,以其高效的性能受到...
KMP(Knuth-Morris-Pratt)算法是一种在字符串中搜索子串的高效算法,由Donald Knuth、James H. Morris和Vaughan Pratt共同提出。它避免了不必要的回溯,大大提高了字符串匹配的效率。这个“kmp.rar”压缩包包含了一...
算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP算法 KMP
KMP(Knuth-Morris-Pratt)算法是一种在主字符串中搜索子字符串的高效算法,由Donald Knuth、Vaughan Pratt和James H. Morris三位学者提出。这个算法避免了在匹配过程中不必要的回溯,显著提高了查找效率。在数据...
KMP(Knuth-Morris-Pratt)算法是其中一种高效的算法,尤其适用于处理具有重复子串的模式匹配问题。接下来,我们将深入探讨KMP算法的基本原理、实现过程以及其在C++中的应用。 ### 1. KMP算法的基本思想 KMP算法的...
易语言KMP(Knuth-Morris-Pratt)算法模块是一个专门为易语言设计的文本处理工具,用于在字符串中高效地查找子串出现的位置。KMP算法是一种改进的字符串匹配算法,由Donald Knuth、Morris和Frank Pratt共同提出,其...
KMP(Knuth-Morris-Pratt)算法是解决这个问题的一种高效方法,尤其适用于在长字符串中查找重复或特定的子串。 KMP算法是由D.E. Knuth、V.R. Morris和J.H. Pratt三位学者在1970年代提出的。它的核心思想是避免了在...
KMP算法,全称为Knuth-Morris-Pratt算法,是一种在字符串中寻找子串的高效搜索算法。它由D.E. Knuth、V. Morris和J.H. Pratt三位学者于1970年提出,主要用于解决模式匹配问题。传统的KMP算法避免了不必要的字符比较...
### 使用KMP算法实现文本查找与替换 #### KMP算法简介 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和Vaughan Pratt共同提出。相较于朴素的字符串匹配方法,KMP算法...
《36KMP算法详解与应用》 36KMP算法,全称为“Knuth-Morris-Pratt”算法,是一种在字符串中高效查找子串出现位置的算法,由D.E. Knuth、V. Morris和J.H. Pratt三位学者在1970年代提出。该算法的核心在于构造一个...
kmp算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串...
KMP(Knuth-Morris-Pratt)算法是一种在文本串(text)中查找模式串(pattern)出现位置的字符串匹配算法。它是由D.E. Knuth、V.R. Morris和J.H. Pratt于1977年提出的。KMP算法避免了模式串在匹配过程中不必要的字符...
KMP(Knuth-Morris-Pratt)字符串模式匹配算法是一种高效的字符串搜索算法,由D.M. Knuth、V. Morris和J.H. Pratt在1970年提出。该算法避免了简单匹配算法中的不必要的回溯,显著提高了在文本字符串中查找模式字符串...
KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris三人于1977年发表,因此得名。该算法能在O(n+m)的时间复杂度内完成对长度为n的文本串S和长度为m的模式串...
### KMP算法详解 #### 1. 引言与背景 KMP算法是Knuth-Morris-Pratt算法的简称,是一种高效的字符串匹配算法。它主要用于解决在一个较长的文本串中寻找一个较短的模式串的问题。传统的暴力匹配算法虽然简单易懂,但...