KMP算法代码案例
2017-03-27 15:49
148 查看
#include <stdio.h> #include <string.h> #include <stdlib.h> int *computer_prefix(char *str_p,int *tt){ if(NULL == str_p) return NULL; int i=0,j=0; int m = strlen(str_p); tt[0]=0; for(i=1;i<m;i++){ while(j>0 && str_p[j]!=str_p[i]) j=tt[j]; if(str_p[j]==str_p[i]) j=j+1; tt[i]=j; } return tt; } int kmp_matcher(char *str_t,char *str_p){ if(NULL ==str_t || NULL == str_p) return -1; int flag = -1; int n = strlen(str_t); int m = strlen(str_p); int i=0,j=0; int *tt = (int*)malloc(sizeof(int)*m); computer_prefix(str_p,tt); if(NULL == tt) return -1; //printf tt for(i=0;i<m;i++){ printf("tt[%d]=%d ",i,tt[i]); } printf("\n"); for(i=0;i<n;i++){ while(j>0 && str_t[i] != str_p[j]) j = tt[j-1]; if(str_t[i] == str_p[j]) j++; if(j == m){ flag++; printf("positon:%d\n",i-j+1); j = tt[j-1]; } } free(tt); tt = NULL; return flag; } void main(){ char *str_p="ababaca"; char *str_t="aababacaafababaca"; printf("orgin_str:%s\n",str_t); printf("find_str:%s\n",str_p); int find_num = kmp_matcher(str_t,str_p); printf("find %d locations\n",find_num+1); }
参考资料:算法导论
相关文章推荐
- lua中require随机读取的代码案例
- KMP算法的代码实现
- Android清除本地数据缓存代码案例 sqlite sharedpref 等等
- Java email 案例代码
- Android中发送有序广播案例代码
- 复杂Powershell案例-获取批量建立账户的状态-PS代码的编写!
- HorizontalScrollView案例代码
- 集合框架_统计字符串中每个字符出现的次数案例代码实现
- KMP算法的C语言代码实现
- 12讲项目实战SEO之HTML代码优化-水平框架-竖直框架-混合框架-案例
- git提交代码冲突解决案例
- 计算KMP模式匹配算法中next数组的代码分析及改进型KMP算法中nextval数组代码分析
- vue项目中swiper动态更新后无法轮播问题 附带案例代码
- 《matlab神经网络43个案例》第三章代码纠错
- 关于最近公司开展内训讲课实例代码等架构设计方面的案例说明
- Coursera deeplearning.ai 深度学习笔记4-2-Deep Convolutional Models Case Studies-深度卷积模型案例及代码实现
- 沪深股市api调用代码案例
- 解决Scrapy性能问题——案例二(含有阻塞的代码)
- 银联在线支付---利用测试案例代码模拟支付应用(修改)
- 【第4篇】TypeScript类的详解案例代码使用。