KMP算法——C++实现版
2015-11-13 22:52
531 查看
// KMP.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <sstream> #define I_N_MAX 10000 using namespace std; void KmpSearch(char[], char[], int[]); void GetNextval(char[], int next[]); int main(){ int nextarr[I_N_MAX]; char cArr1[I_N_MAX]; char cArr2[I_N_MAX]; cin >> cArr1; cin >> cArr2; GetNextval(cArr1, nextarr); KmpSearch(cArr1, cArr2, nextarr); system("pause"); } void KmpSearch(char s[], char p[], int nextarr[]){ int i = 0, j = 0; int sLenth = strlen(s); int pLenth = strlen(p); while (i < sLenth&&j < pLenth) { if (j == -1 || s[i] == p[j]){ i++, j++; } else{ j = nextarr[j]; } } if (j == pLenth){ stringstream ss; int temp = i - j + 1; ss << "第" << temp << "个字母到第" << i << "个字母为匹配字符"; cout << ss.str()<<endl; } else { cout << "None" << endl; } } void GetNextval(char p[], int nextarr[]){ int pLenth = strlen(p); nextarr[0] = -1; int k = -1; int j = 0; while (j < pLenth - 1) { if (k == -1 || p[j] == p[k]){ j++, k++; if (p[j] != p[k]){ nextarr[j] = k; } else { nextarr[j] = nextarr[k]; } } else { k = nextarr[k]; } } }
相关文章推荐
- 64位Ubuntu无法安装 lib32stdc++6问题
- Strchr()函数详解
- dancing links解决X问题的C++实现
- JAVA C# C/C++之比较学:初始化顺序
- C++模板元编程 - 挖新坑的时候探索到了模板元编程的新玩法
- C++11新特性
- C++学习第二课
- C++常见面试题
- C++ 构造过程和析构过程
- 成员函数后面加const,没有const,以及使用的区别
- C语言字符串操作函数
- C++类的多继承
- C++命名准则
- 关于C++中子类调用父类方法的一个问题
- C++中this指针的用法详解
- 开始使用C++11的几个理由
- 开始使用C++11的几个理由
- C++报错:_BLOCK_TYPE_IS_VALD(pHead->nBlockUse)
- c++中的const
- C---仓储管理系统实现(嵌套链表or二维链表)