KMP模式匹配算法
来源:互联网 发布:七天网络查分登入账号 编辑:程序博客网 时间:2024/04/29 08:04
/**************************KMP算法**************************/#include <stdio.h>/*获取T串的next数组*/void get_next(char *T,int *next){ int i=0,j=-1; next[0]=-1; while(i<strlen(T)) { if(-1==j||T[i]==T[j]) //若j==-1或匹配成功,则继续匹配,并且将next[i]=j { i++;j++; next[i]=j; } else j=next[j]; //若失配,则j向前回溯到已匹配好的位置 }}/*返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数返回0*//*T非空,1<=pos<=strlen (S)*/int Index_KMP(char *S,char *T,int pos){ int k; int i=pos; /*i用于主串S当前位置下标值,若pos不为0,则从pos位置开始匹配*/ int j=0; /*j用于子串T中当前位置的下标*/ int next[255]; /*定义一个next数组*/ int S_len=strlen(S),T_len=strlen(T); get_next(T,next); /*得到T串的next数组*/ while(i<S_len&&j<T_len) /*若i小于S的长度且j小于T的长度,循环继续*/ { if(-1==j||S[i]==T[j]) /*两字母相等则继续*/ { ++i;++j; } else /*指针后退重新开始匹配*/ { j=next[j]; /*j退回合适的位置,i值不变*/ } } if(j>T_len-1) /*如果j>T_len-1表示匹配成功,返回i-T_len即为T在S中的位置*/ return i-T_len; else return -1; /*匹配不成功则一律返回-1*/}int main(){ char T[255]; char S[255]; int next[100]; int pos; int i=0; printf("请输入S串:"); gets(S); printf("请输入T串:"); gets(T); printf("请输入初始匹配位置:"); scanf("%d",&pos); printf("T串在S串中pos之后的位置为:%d\n",Index_KMP(S,T,pos)+1); return 0;}
0 0
- 模式匹配---KMP算法
- 模式匹配 KMP算法
- 模式匹配-KMP算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- 模式匹配kmp算法
- 模式匹配算法kmp
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP算法模式匹配
- KMP 模式匹配算法
- js隐式全局变量造成的bug
- 沈南鹏称投资人要早一点拼图ojgiD1k
- BM模式匹配算法
- 【Cocos2d-x 017】 多分辨率适配完全解析
- sql语句优化
- KMP模式匹配算法
- 编译原理之文法一
- 浅谈PVC塑料配方计算软件的设计
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”
- 基于数组的堆栈实现
- 编译原理之文法二
- adsaD
- 应聘成功不是本事,会筛选顶级offer才是真本事
- linux使用wine安装windows exe程序