#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 100
#define TRUE 1
#define FALSE 0
typedef unsigned char SString[Max+1];
typedef int Status;
Status StrAssign(SString T,char *strs)
{
int i;
T[0]=0;
for(i=0;strs[i];i++)
{
T[i+1]=strs[i];
T[0]=i+1;
}
}
void get_next(SString T,int *next)
{
int i,j;
i=1;
j=0;
next[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j])
{
++i;
++j;
next[i]=j;
}
else
j=next[j];
}
}
int Index_KMP(SString S,SString T,int pos)
{
int i=pos;
int j=1;
int next[255];
get_next(T,next);
while(i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j])
{
++i;
++j;
}
else
{
j=next[j];
}
}
if(j>T[0])
return i-T[0];
else
return 0;
}
int main()
{
SString S,T;
int m;
char strs1[Max];
char strs2[Max];
while(scanf("%s %s",strs1,strs2)!=EOF)
{
StrAssign(S,strs1);
StrAssign(T,strs2);
m=Index_KMP(S,T,1);
if(m)
printf("%d\n",m);
else
printf("0\n");
}
return 0;
}
KMP字符串模式匹配算法实现
原文作者:KMP算法
原文地址: https://blog.csdn.net/sunshine_rebrith/article/details/78827791
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/sunshine_rebrith/article/details/78827791
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。