KMP字符串匹配
#include<iostream> using namespace std; #define MAX 255 typedef unsigned char BYTE; typedef BYTE String[MAX+]; bool strAssign(String& strTemp,char* Temp); //定长字符串存储
bool strTravel(String& strTemp); //打印
void KMP(String& strMother,String& strSon,int* pData);
void GetNext(String& strSon,int* pNext);
//KMP算法的实现要求两个子函数 KMP() 和GetNext() void main()
{ String strMother;
memset(strMother,,sizeof(strMother)); String strSon;
memset(strSon,,sizeof(strSon)); strAssign(strMother,"HHHeHeHHe");
strAssign(strSon,"HeHe"); strTravel(strMother);
strTravel(strSon);
int* pData = (int*)malloc(sizeof(int)*(strMother[]+)); KMP(strMother,strSon,pData); int i = ;
for(i=;i<=pData[];i++)
{
cout<<pData[i]<<" "; }
cout<<endl; }
bool strAssign(String& strTemp,char* Temp)
{
strTemp[] = strlen(Temp); int i = ;
for(i=;i<=strTemp[];i++)
{
strTemp[i] = Temp[i-]; } return true; }
bool strTravel(String& strTemp)
{
int i = ;
for(i=;i<=strTemp[];i++)
{
cout<<strTemp[i]<<" "; } cout<<endl;
return true; }
void KMP(String& strMother,String& strSon,int* pData)
{
int* pNext = (int*)malloc(sizeof(int)*(strSon[]+)); GetNext(strSon,pNext); int i = ;
int j = ;
int k = ; while(i<=strMother[])
{
if(i==||strMother[i]==strSon[j])
{
i++;
j++; }
else
{
j = pNext[j]; } if(j>strSon[])
{
pData[k] = i-strSon[];
k++;
j=; } } pData[] = k-;
free(pNext); }
void GetNext(String& strSon,int* pNext)
{
pNext[] = ; int i = ;
int j = ; while(i!=strSon[])
{
if(j==||strSon[i]==strSon[j])
{
i++;
j++; pNext[i] = j; }
else
{
j = pNext[j]; } }
}
KMP字符串匹配的更多相关文章
- {Reship}{KMP字符串匹配}
关于KMP字符串匹配的介绍和归纳,作者的思路非常清晰,推荐看一下 http://blog.csdn.net/v_july_v/article/details/7041827
- 洛谷P3375 - 【模板】KMP字符串匹配
原题链接 Description 模板题啦~ Code //[模板]KMP字符串匹配 #include <cstdio> #include <cstring> int cons ...
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
- P3375 【模板】KMP字符串匹配
P3375 [模板]KMP字符串匹配 https://www.luogu.org/problemnew/show/P3375 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在 ...
- 洛谷—— P3375 【模板】KMP字符串匹配
P3375 [模板]KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next. (如 ...
- P3375 模板 KMP字符串匹配
P3375 [模板]KMP字符串匹配 来一道模板题,直接上代码. #include <bits/stdc++.h> using namespace std; typedef long lo ...
- KMP字符串匹配 模板 洛谷 P3375
KMP字符串匹配 模板 洛谷 P3375 题意 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.(如果 ...
- KMP字符串匹配学习
KMP字符串匹配学习 牛逼啊 SYC大佬的博客
- KMP(字符串匹配)
1.KMP是一种用来进行字符串匹配的算法,首先我们来看一下普通的匹配算法: 现在我们要在字符串ababcabcacbab中找abcac是不是存在,那么传统的查找方法就是一个个的匹配了,如图: 经过六趟 ...
随机推荐
- ActionScript简单实现Socket Tcp应用协议分析器
转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...
- 张冬:OpenPOWER CAPI为什么这么快?(二)
张冬:OpenPOWER CAPI为什么这么快?(二) PMC公司数据中心存储架构师张冬 有了CAPI的FPGA是怎么做的? 首先认识一下这个体系里的三个角色: AFU(Acceleration ...
- 各版本SDK Tools及ADT下载技巧
我们在开发的时候,尤其是使用Eclipse安装ADT插件进行环境配置,我们需要从下载ADT插件及SDK,当我们从官网下载的时候,有的时候可能找不到下载的地方或者下载不到自己想要的版本,我就在此总结下如 ...
- 2015.01.06 JQuery
jQuery是一个兼容多浏览器的javascript库.开发出来的JavaScript的脚本包.非侵入性的脚本. 下载地址:http://jquery.com/ (打不开网页需要翻* ...
- 读书笔记--<<会说话的代码>>
三天看完一本书,说出来我都不信,不过我还真是史无前例的做到了, 现在分享一下我的收获,希望大家拍砖,共同讨论一下. <<会说话的代码>>一书是我们BJDP小组里的王洪亮老师的一 ...
- mysql 重启
/etc/init.d/mysql restart /etc/init.d/mysql stop /etc/init.d/mysql start
- C++ typedef与const
1.typedef 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间: typedef int INT; ...
- VS2010 CLR20r3 devenv.exe 错误的解决--vs重启解决方案
VS2010 CLR20r3 devenv.exe 错误的解决 最近我的vs2010经常过段时间就报CLR20r3错误的解决,出现这个异常我的vs2010就要重启,很是烦人,这么搞没法干活也. 搜 ...
- struts2中 ServletActionContext与ActionContext区别
1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...
- 论山寨手机与Android 【14】3G SmartPhone时代的MTK
分析了SmartPhone的里里外外以后,现在我们可以分析MTK的机遇和挑战了.MTK面临的外部环境在发生变化,变化有两条,一是移动网络从2G演变到3G,二是手机由FeaturePhone演化到Sma ...