串的模式匹配
来源:互联网 发布:系统集成软件有哪些 编辑:程序博客网 时间:2024/04/30 06:24
以前每次看到字符串匹配,一律跳过,今天耐着性子研究了下,依旧是半混沌状态,先整理放在这,以备后用。这篇文章帮助很大,朴素匹配算法&KMP算法,收藏先。
1. 朴素匹配算法
int PatternMatch_Common(const char *pString, const char *pPattern){ if (0==pString || 0==pPattern) { return -3; } if ('\0'==*pString || '\0'==*pPattern) { return -2; } int lengthOfString=strlen(pString), lengthOfPattern=strlen(pPattern); int indexOfString=0, indexOfPattern=0; while (indexOfString<lengthOfString&&indexOfPattern<lengthOfPattern) { if (pString[indexOfString]==pPattern[indexOfPattern]) { ++indexOfString; ++indexOfPattern; } else { indexOfString=indexOfString-indexOfPattern+1; indexOfPattern=0; } } if (indexOfPattern==lengthOfPattern) { return indexOfString-lengthOfPattern; } else return -1;}
真心懂得不彻底,就记住一句话:在P[0~j-1]中找一个最长真前缀使得它等于P[0~j-1]的最长真后缀,把这个长度值放进pNext[j]
void GetNext(const char *pPattern, int *pNext){ int k=-1, j=0, length=strlen(pPattern); pNext[0]=-1; while (j<length) { if (-1==k || pPattern[k]==pPattern[j]) { ++k; ++j; pNext[j]=k; } else { k=pNext[k]; } }}int PatternMatch_KMP(const char *pString, const char *pPattern, const int *pNext){ if (0==pString || 0==pPattern) { return -3; } if ('\0'==*pString || '\0'==*pPattern) { return -2; } int lengthOfString=strlen(pString), lengthOfPattern=strlen(pPattern); int indexOfString=-1, indexOfPattern=-1; while (indexOfString<lengthOfString&&indexOfPattern<lengthOfPattern) { if (-1==indexOfPattern || pString[indexOfString]==pPattern[indexOfPattern]) { ++indexOfString; ++indexOfPattern; } else { indexOfPattern=pNext[indexOfPattern]; } } if (indexOfPattern==lengthOfPattern) { return indexOfString-lengthOfPattern; } else return -1;}
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- 串的模式匹配
- MFC文件选择对话框CFileDialog的使用
- makefile中自动化变量
- 灵飞经5龙生九子 第二十一章 危机四伏 1
- Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET)
- 灵飞经5龙生九子 第二十一章 危机四伏 2
- 串的模式匹配
- 灵飞经5龙生九子 第二十一章 危机四伏 3
- 2013年关于博客更新的说明
- ArcGIS Engine移动图层顺序
- Python函数式编程指南(二):函数
- MonoDevelop 4.0.9 on CentOS 6.3 安装笔记
- POJ1014 Dividing
- C语言中宏的使用
- C++中几个预定义变量的介绍