BF_KMP字符串匹配
2013-04-25 15:13
465 查看
#pragma once class CSearchString { private: CSearchString(void); ~CSearchString(void); public: static bool BF(const char *PArr1, int nArr1Size, const char *pArr2, int nArr2Size); static int KMP(const char *pSrcString, int nSrcLength, const char *pModeString, int nModeLength, int SearchPos); private: static int* NextPosArry(const char *pModeString, int nLength); };
#include <Windows.h> #include <assert.h> #include "BF_KMP.h" CSearchString::CSearchString(void) { } CSearchString::~CSearchString(void) { } bool CSearchString::BF( const char *pSrcString, int nSrcLength, const char *pModeString, int nModeLength ) { assert(pSrcString != NULL && pModeString != NULL); assert(nSrcLength > 0 && nModeLength > 0); if (nSrcLength < nModeLength) return false; for (int i = 0; i < nSrcLength; i++) { for (int j = 0; j < nModeLength && pSrcString[j] == pModeString[i + j]; j++) { if (j == nModeLength - 1) return true; } } return false; } int CSearchString::KMP( const char *pSrcString, int nSrcLength, const char *pModeString, int nModeLength, int SearchPos ) { int *pNextArry = NextPosArry(pModeString, nModeLength); int i = SearchPos; int j = 0; while ( i < nSrcLength && j < nModeLength ) { if( j == -1 || pSrcString[i] == pModeString[j] ) { ++i; ++j; } else { j = pNextArry[j]; } } delete []pNextArry; if( j >= nModeLength ) return i-nModeLength; else return -1; } int* CSearchString::NextPosArry( const char *pModeString, int nModeLength ) { if (pModeString == NULL || nModeLength <= 0) return NULL; //Next数组 int *pNextArry = new int[nModeLength]; if (pNextArry == NULL) return NULL; //初始化 int i = 0; int j = -1; pNextArry[0] = -1; //循环求解 while (i < nModeLength - 1) { if (j == -1 || pModeString[i] == pModeString[j]) { i++; j++; if (pModeString[i] != pModeString[j]) pNextArry[i] = j; else pNextArry[i] = pNextArry[j]; } else { j = pNextArry[j]; } } return pNextArry; }
相关文章推荐
- 字符串匹配算法BF和KMP总结
- 字符串匹配算法——BF、KMP、Sunday
- 字符串匹配从BF到BM再到KMP(一个非主流NEXT函数)
- 字符串匹配算法之BF vs KMP
- BF到KMP,再到后缀数组的字符串匹配
- 字符串匹配(BF,KMP,BM)
- BF,KMP,BM三种字符串匹配算法性能比较
- 字符串匹配算法(BF KMP)
- sdut oj2125 数据结构实验之串二:字符串匹配(BF与KMP做法)
- 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
- KMP 字符串匹配 SDNU 1100 字符串查找 HDU 2087 剪花布条
- [Algorithm] 字符串匹配: MP,KMP,暴力搜索等(ZT)
- 字符串匹配——简单匹配,KMP,分析讲解
- 算法|KMP:字符串匹配(人话版)
- 字符串匹配和 KMP 算法
- 字符串匹配算法之KMP
- HDU 2087 剪花布条(字符串匹配KMP)
- 洛谷 P3375 【模板】KMP字符串匹配
- sunday算法研究——超越kmp的字符串匹配
- KMP字符串匹配