数据结构(之)KMP算法
2013-10-13 22:38
399 查看
// KMP_algorithm.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<iostream>using namespace std;class KMP{private:public://KMP();void matchStr(char source[], char match[]);void getNext(char match[], int length, int next[]);int findStr(char source[], int slength, char match[], int mlength, int next[]);};int KMP::findStr(char source[], int slength, char match[], int mlength, int next[]){int i=0, j=0;while(i<slength && j<mlength){if(j==-1 || source[i]==match[j]){i++;j++;}elsej=next[j];}if(j>=mlength-1)return i-mlength+1;elsereturn 0;}void KMP::matchStr(char source[], char match[]){int slength = 0;int mlength = 0;while(source[slength]!='\0')slength++;while(match[mlength]!='\0')mlength++;int* next=new int[mlength];getNext(match, mlength, next);int result;result=findStr(source, slength, match, mlength, next);cout<<"Result is: "<<result<<endl;delete[] next;}void KMP::getNext(char match[], int mlength, int next[]){int i=0, k=-1;//int next[length];next[0]=-1;while(i<mlength-1){while(k>=0 && match[i]!= match[k])k=next[k];i++;k++;if(match[i] == match[k])next[i]=next[k];elsenext[i]=k;}}int main(){char source[]="babddebdbdy";char match[]="bdy";KMP kp;kp.matchStr(source, match);}结果如下:
相关文章推荐
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- Java数据结构之简单链表的定义与实现方法示例
- qqwry.dat的数据结构图文解释第1/2页
- Java数据结构之双端链表原理与实现方法
- Huffman 编码压缩算法
- C 的反思穷究链表
- 数据结构&算法学习
- 第二话:数据结构的历史与来由
- 第一话:你的数据结构怎么学的?
- 鸟瞰数据结构的知识点全貌
- 数据结构的基本概念和术语
- 开发语言、开发工具、数据结构和算法的关系
- 排序算法总结
- CC数据结构学习.0
- PHP常用函数
- [转]可视化的数据结构和算法
- PHP数据结构预热:PHP的迭代器
- C语言实现各类排序算法
- vector list两种不同的容器