`
pleasetojava
  • 浏览: 730311 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

KMP模式匹配算法 C++实现

 
阅读更多

KMP模式比配算法

// KMP模式比配算法.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#define MAX 1000
using namespace std;

char s[MAX],t[MAX];
int next[MAX];

//
void ComputeNext(char *t,int *next,const int lenT)
{
int i,j;
next[0] = -1;
i = 0;
j = -1;
while(i<lenT)
{
while(j>=0&&t[i] !=t[j] )
j = next[j];
j++;
i++;
//next[i] = j;
//改进
if(t[i]==t[j])
next[i] = next[j];
else
next[i] = j;
}
}

//
int KMP(char *s,char *t,int *next,const int lenS,const int lenT)
{
int i,j;
i=j=-1;
while(i<lenS&&j<lenT)
{
if((j==-1)||(s[i]==t[j]))
{
i++;
j++;
}
else
j = next[j];
}
if(j>=lenT)
return i-lenT+1;
else
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
int cases;
cout<<"请输入案例的个数:";
cin>>cases;
while(cases--)
{
cout<<"请输入主串:"<<endl;
cin>>s;
int lenS = strlen(s);
while(1)
{
cout<<"请输入需要匹配的模式串(以0结束):"<<endl;
cin>>t;
if(!strcmp(t,"0"))
break;
int lenT = strlen(t);
for(int i=0;i<lenT;i++)
next[i] = -1;
ComputeNext(t,next,lenT);
int pos = KMP(s,t,next,lenS,lenT);
if(pos==0)
cout<<"没有匹配项!"<<endl;
else
cout<<"匹配的开始位置为:"<<pos<<endl;
}
}
system("pause");
return 0;
}

---------------------------------------------------程序测试---------------------------------------------------

请输入案例的个数:1
请输入主串:
heyongluoyao8
请输入需要匹配的模式串(以0结束):
he
匹配的开始位置为:1
请输入需要匹配的模式串(以0结束):
yong
匹配的开始位置为:3
请输入需要匹配的模式串(以0结束):
luo
匹配的开始位置为:7
请输入需要匹配的模式串(以0结束):
luoyao
匹配的开始位置为:7
请输入需要匹配的模式串(以0结束):
lao
没有匹配项!
请输入需要匹配的模式串(以0结束):
0
请按任意键继续. . .

分享到:
评论

相关推荐

    kmp模式匹配算法

    KMP(Knuth-Morris-Pratt)模式匹配算法是一种在主串(目标字符串)中查找子串(模式字符串)的高效算法,由D.E. Knuth、V.R. Morris和J.H. Pratt于1977年提出。相较于简单的暴力匹配方法,KMP算法在模式匹配过程中...

    KMP模式匹配算法

    KMP模式匹配C描述算法。

    重庆大学数据结构实验报告,串的操作与KMP模式匹配算法源码及结果截屏

    总之,这个实验报告详细介绍了如何在C++环境中进行串操作,并且实现了KMP模式匹配算法,这对于理解和掌握字符串处理和算法设计具有重要意义。通过实际编程和结果分析,学生可以深入理解这些概念,并提升问题解决能力...

    字符串的模式匹配算法——KMP

    字符串的模式匹配算法在计算机科学中占据着重要的地位,它主要应用于文本搜索、数据分析和文本处理等领域。KMP(Knuth-Morris-Pratt)算法是其中一种高效的算法,尤其适用于处理具有重复子串的模式匹配问题。接下来...

    KMP中文字符匹配算法的C++实现

    在C++中实现KMP算法,首先需要处理输入的字符串。由于C++标准库中的`std::string`通常存储的是ASCII字符,所以我们可能需要使用`std::wstring`或自定义数据结构来处理中文字符。同时,我们需要确保字符串的编码方式...

    KMP.rar_KMP模式匹配算法_字符串查找

    《KMP模式匹配算法在C++中的实现及字符串查找》 KMP(Knuth-Morris-Pratt)模式匹配算法是计算机科学中一种高效的字符串匹配算法,由D.E.Knuth、V.R.Morris和J.Pratt于1977年提出。它主要用于在一个长文本串(通常...

    模式匹配的简单算法(C++实现)

    根据提供的标题、描述、标签及部分内容,我们可以提炼出与模式匹配相关的知识点,特别是关于一个简单的模式匹配算法在C++中的实现。以下是对这些知识点的详细解释: ### 模式匹配的简单算法 #### 1. 模式匹配基础...

    模式匹配的KMP算法

    模式匹配的KMP算法是一种高效、可靠的串模式匹配算法,具有广泛的应用前景。本课程设计旨在通过模式匹配的KMP算法的设计和实现,帮助学生深入了解数据结构、算法设计、程序实现等知识点,并提高学生的编程能力和问题...

    基于字符串模式匹配算法的病毒感染检测问题_算法_数据结构_

    本话题将深入探讨如何利用C语言实现基于字符串模式匹配算法的病毒感染检测。 首先,我们需要了解字符串模式匹配的基本概念。在这一背景下,我们有一个目标字符串(通常代表一段文件内容)和一个模式字符串(可能是...

    KMP算法(C++实现)

    根据上述描述,以下是对给定文件中的KMP算法C++实现的知识点总结: 1. next数组的计算规则: - next[0]=-1,表示模式串的第一个字符不匹配时,模式串指针应该回到起始位置。 - next[j]=max{k: 0[0...k-1]=src[j-k...

    模式匹配中的KMP算法的实现

    里面包含完整的可运行的程序,课设说明书。...在程序设计中,采用了串的KMP模式匹配算法实现了子串的定位操作。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以解决实际问题。 里面

    模式匹配KMP算法

    模式匹配 KMP 算法 模式匹配 KMP 算法是一种高效的字符串匹配算法,由 D.E.Knuth、J.H.Morris...KMP 算法是一种高效的模式匹配算法,通过避免回溯操作,提高算法的效率。该算法广泛应用于字符串匹配、文本搜索等领域。

    KMP算法C++源码实现(有工程,可编译)

    在C++实现KMP算法时,首先需要构建一个部分匹配表(也称为失配表),这个表记录了当主串与模式串不匹配时,模式串应该移动的步数,以避免重复比较已经比较过的字符。这部分通常涉及两个关键步骤: 1. **构造部分...

    KMP算法实现的C++代码

    以下是一个简单的KMP算法C++实现: ```cpp #include #include std::vector&lt;int&gt; computePrefixFunction(const std::string& pattern) { int m = pattern.size(); std::vector&lt;int&gt; pi(m); for (int i = 1, j ...

    KMP算法实现模板(c++版)ACM算法

    **KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...

    [VC++ 2010]一个封装有KMP模式匹配算法的String类示例

    在本文中,我们将深入探讨如何在C++编程环境中,特别是在Visual C++ 2010环境下,实现一个封装了KMP(Knuth-Morris-Pratt)模式匹配算法的自定义String类。KMP算法是一种高效的字符串搜索算法,能够处理模式串中存在...

    串的简单模式匹配算法 源代码C++版

    根据给定文件的信息,本文将详细介绍“串的简单模式匹配算法”在C++中的实现原理及具体应用。本文首先解析简单模式匹配算法的基本思想,并基于提供的源代码进行深入分析。 ### 一、简单模式匹配算法简介 #### 1.1 ...

    KMP字符匹配算法

    KMP(Knuth-Morris-Pratt)算法是一种在文本串中查找模式串的高效字符串匹配算法,由唐纳德·克努斯、斯特兰·莫里斯和理查德·普拉特在1977年提出。它避免了不必要的回溯,大大提高了匹配效率,尤其在模式串中存在...

    KMP算法实现,语言C++

    KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中高效地查找子串的模式匹配算法。它由Donald Knuth、Vaughan Pratt和James H. Morris于1970年代提出,解决了在不进行回溯的情况下查找模式字符串在主字符串中出现...

    KMP算法(C++)示例代码

    KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配...

Global site tag (gtag.js) - Google Analytics