首页 > 代码库 > KMP算法---字符串匹配
KMP算法---字符串匹配
算法细节详见点击打开链接和点击打开链接
#include <stdio.h>#include <stdlib.h>#define N 7#define M 15void showpset(int* a);void cal_pset(char* a, int* p,int n);int KMP(char* a,char* b,int* P);int main(void){ char a[M]={‘a‘,‘b‘,‘a‘,‘c‘,‘a‘,‘b‘,‘a‘,‘a‘,‘b‘,‘a‘,‘b‘,‘a‘,‘c‘,‘b‘,‘d‘}; char b[N]={‘a‘,‘b‘,‘a‘,‘b‘,‘a‘,‘c‘,‘b‘}; int P[N]={0}; int i=1; int index=-1; cal_pset(b,P,N); index=KMP(a,b,P); //showpset(P); printf("%d ",index); system("pause"); return 0;}int KMP(char* a,char* b,int* P){ int i=0,j=0; int flag=0; while(i<M) { while(a[i]==b[j]) { if(j==N-1) { flag=1; break; } if(i<M-1 && j<N-1) { i++; j++; } else { flag=2; break; } } if(a[i]!=b[j]) { if(j==0 || (j!=0 && P[j-1]==0)) { while(i<M && a[i]!=b[0]) { i++; } j=0; } else { j=P[j-1]; } } if(flag==1) { return i-j; } if(flag==2) { return -1; } } return -1;}void cal_pset(char* a, int* p,int n){ int i=1; while(i<n) //生成P矩阵 { int j=0; while(a[j]==a[i]) { p[i]=p[i-1]+1; j++; i++; } p[i++]=0; }}void showpset(int* a){ for(int i=0;i<N;i++) { printf("%d ",a[i]); } return ;}
KMP算法---字符串匹配
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。