字符串匹配(普通+KMP)
2014-06-04 20:38
344 查看
普通的字符串匹配函数:
KMP算法:
其中比较重要的过程就是计算next函数
参考文献:http://www.cnblogs.com/zhizhizhiyuan/p/3508052.html
// KMP.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //求字串位置的定位函数 char *s="acabaabaabcacaabc"; char *p="abaabcac"; int lenS; int lenP; int Index(char *s,char *p,int pos){ int i=pos; int j=0; while(i<lenS&&j<lenP){ if(s[i]==p[j]) { i++; j++; } else { i=i-j+1;j=0; } } if(j=lenP) return i-lenP; else return 0; } int _tmain(int argc, _TCHAR* argv[]) { lenS=strlen(s);//目标串长度 lenP=strlen(p);//字串长度 int index=Index(s,p,0); printf("%d\n",index); return 0; }基本思想:如果匹配成功,则目标串和字串同时向后移动一位,否则,目标串从当前位置向后移动一位,字串则移动到开始位置进行重新匹配。
KMP算法:
其中比较重要的过程就是计算next函数
参考文献:http://www.cnblogs.com/zhizhizhiyuan/p/3508052.html
// KMP.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" //求字串位置的定位函数 char *s="acabaabaabcacaabc"; char *p="abaabcac"; int lenS; int lenP; int Index(char *s,char *p,int pos){ int i=pos; int j=0; while(i<lenS&&j<lenP){ if(s[i]==p[j]) { i++; j++; } else { i=i-j+1;j=0; } } if(j=lenP) return i-lenP; else return 0; } int *next; //计算前缀函数 void getNext(char *p,int * &next){ int i=0; next[0]=-1; int j=-1; while(p[i]!='\0'){ if(j==-1||p[i]==p[j]) { i++; j++; if(p[i]!=p[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } //使用kmp的编程实现 int Index_KMP(char *s,char *p,int pos){ int i=pos; int j=0; while(i<lenS&&j<lenP) { if(j==0||s[i]==p[j]) { i++; j++; } else j=next[j]; } if(j==lenP) return i-lenP; else return 0; } int _tmain(int argc, _TCHAR* argv[]) { lenS=strlen(s);//目标串长度 lenP=strlen(p);//字串长度 //int index=Index(s,p,0); next=(int *)malloc(sizeof(int)*lenP); getNext(p,next); //for(int i=0;i<lenP;i++) // printf("%d ",next[i]); int index=Index_KMP(s,p,0); printf("%d\n",index); return 0; }所有代码已经调试通过!
相关文章推荐
- Tyvj 2016 (Clover 9) 外星人 字符串匹配:KMP
- 算法|KMP:字符串匹配(人话版)
- KMP字符串匹配算法学习总结
- 【模板】KMP字符串匹配
- KMP算法和普通算法字符串匹配差距
- 字符串匹配——KMP
- 字符串匹配之KMP
- KMP---字符串匹配
- 字符串匹配(kmp)
- 浅谈字符串匹配的几种算法(KMP,Boyer-Moore)
- 字符串匹配查找算法-KMP
- KMP 字符串匹配 POJ 3461 Oulipo
- 字符串匹配 之 KMP
- BM和KMP字符串匹配算法学习
- sunday算法研究——超越kmp的字符串匹配
- 字符串匹配的KMP算法(简单清晰的认识KMP)
- Implement strStr():字符串匹配--》KMP
- poj 1226 (字符串匹配,用KMP)
- KMP字符串匹配
- 高效面试之字符串匹配(KMP,AC算法)