模式匹配KMP算法实现
来源:互联网 发布:pad版软件助手 编辑:程序博客网 时间:2024/05/18 15:50
KMP模式匹配算法原理大家可以参见任何一本数据结构课本,原理这里就不多少了。实现KMP算法主要就是根据输入的模式串构造出模式串的next数组,这个数组决定了当某一次匹配失败后应该从哪个位置开始进行匹配,因此KMP算法的精髓就是正确算出模式串的next数组。实现代码如下
在构造出next数组后就可以实现KMP算法了。这里采用源串acabaabaabcacaabc,模式串abaabcac进行测试。源代码如下:
#include <stdio.h>
#include <string.h>
#define MAXSIZE 100
int next[MAXSIZE];
int S_lenth,D_lenth;
char source[MAXSIZE],detination[100];
void get_next()
{
int i=1,j=0;
next[1]=0;
while(i<=D_lenth)
{
if(j==0||(detination[i-1]==detination[j-1]))
{
++i;
++j;
next[i]=j;
}
else
{
j=next[j];
}
}
}
int KMP()
{
int i=0,j=1;
while(i<=S_lenth&&j<=D_lenth)
{
if(j==0||(source[i]==detination[j-1]))
{
++i;
++j;
}
else
{
j = next[j];
}
}
if(j>D_lenth)
{
return i-D_lenth;
}
else
return 0;
}
int main()
{
int i=0;
printf("输入源串!!!\n");
scanf("%s",&source);
printf("输入模式串!!!\n");
scanf("%s",&detination);
S_lenth = strlen(source);
D_lenth = strlen(detination);
get_next();
printf("next数组元素为:\n");
for(i=1;i<=D_lenth;i++)
{
printf("%d ",next[i]);
}
printf("\n模式串开始于源串%d位置处",KMP());
return 0;
}
结果如下图:
- KMP模式匹配算法实现
- 模式匹配KMP算法实现
- KMP模式匹配算法实现
- 算法:KMP算法实现的模式匹配
- KMP模式匹配算法分析与实现
- 模式匹配 -- KMP 算法原理与实现
- KMP模式匹配算法 C++实现
- KMP字符串模式匹配算法实现(php)
- 模式匹配 KMP C语言算法实现
- C++实现KMP模式匹配算法
- 理解与实现KMP模式匹配算法
- KMP模式匹配算法C++实现
- KMP字符串模式匹配算法实现
- KMP模式匹配算法 C++实现
- 字符串模式匹配的KMP算法实现
- KMP字符串模式匹配算法Java实现
- C语言实现KMP模式匹配算法
- KMP字符串模式匹配算法实现
- 设计模式之Builder模式
- HotSpot JVM的内存管理
- 实习总结(十七)---实习总结
- 一派胡言
- poj 1269 Intersecting Lines(判断直线相交 求交点)
- 模式匹配KMP算法实现
- wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)
- 魔兽世界的地形和建筑
- Android编程入门
- 浅谈mysql_fetch_array和mysql_fetch_row
- Get Minutes for Match Event Back!!!
- Jsp中include动作指令简介
- 一年了,小记
- 简单工厂模式小结整理