KMP算法实现
2015-10-20 12:25
363 查看
/** * name:KMP * time:2012-11-22 * 字符串快速匹配 */ #include<stdio.h> #include<string.h> typedef struct seqstring{ char string[100]; int length; }seqstring; void getnext(seqstring p,int next[]){ int i,j; next[0]=-1;//next[0]放上-1 i=0;//指向字符串每个字符的指针 j=-1; while(i<p.length){//没有到达结尾的话 if(j==-1||p.string[i]==p.string[j]){//如果是第一个字符或遇到相同的字符 i++;j++;next[i]=j; } else j=next[j]; } for(i=0;i<p.length;i++){//输出next[]值 printf("%d",next[i]); } } int kmp(seqstring t,seqstring p,int next[]){ int i,j; i=j=0; while(i<t.length&&j<p.length){ if(j==-1||t.string[i]==p.string[j]){ i++;j++; } else j=next[j]; } if(j==p.length) return i-p.length; else return -1; } int main(){ seqstring t,p; int next[50]; printf("please input string t:"); scanf("%s",t.string); t.length=strlen(t.string); printf("please input string p:"); scanf("%s",p.string); p.length=strlen(p.string); getnext(p,next); printf("\n%d\n",kmp(t,p,next)); }
相关文章推荐
- nohup 输出重定向
- 读取日志文件进行用户数据进库不完整补漏
- mysql 查找重复的字段,并删除记录只保留一条
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
- 【测试】Gunicorn , uWSGI同步异步测试以及应用场景总结
- Python发送邮件的例子
- 关于友元类
- [转] ios数组基本用法和排序
- JSP EL表达式忽略方法
- 给 Android 开发者的 RxJava 详解
- [转] 【iOS基础知识】之判断NSString是否为整数、浮点数
- HTML学习5:常用标签之图像标签
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
- JSP中param标签用法实例分析
- 25.Android 轻缓存工具SharedPreferencesUtil
- cocos2d中让视角根据主角精灵移动
- KeyNi liu's living habits
- 列一个要讲的故事列一个表
- Android 可拖拽的GridView效果实现, 长按可拖拽item
- 数据检索---分词算法