#include <stdio.h>
#define M 255
typedef struct node{
char data[M];
int length;
}SString;
void Init_Str(SString &str){
str.data[0]='\0';
str.length=0;
}
int strlen(char s[]){
int i=0;
while(s[i]!='\0'){
i++;
}
return i+1;
}
void StrAssign(SString &str,char s[]){ //串赋值
for(int i=1;i<strlen(s);i++){
str.data[i]=s[i-1];
}
str.length=strlen(s);
}
void get_next(SString t,int next[]){ //计算next数组
int i=1,j=0;
next[1]=0;
while(i<t.length){
if(j==0 || t.data[i]==t.data[j]){
i++,j++;
next[i]=next[j]+1;
}
else{
j=next[j];
}
}
}
int Index_KMP(SString s,SString t){
int i=1,j=1;
int next[t.length+5];
get_next(t,next);
while(i<s.length && j<t.length){
if(j==0 || s.data[i]==t.data[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>t.length-1){
return i-t.length;
}
return 0;
}
int main(){
SString s,t,h;
Init_Str(s);
Init_Str(t);
char ch[20]="ababdabc";
char ch1[8]="abc";
StrAssign(s,ch);
//puts(s.data);
StrAssign(t,ch1);
//puts(t.data);
printf("%d",Index_KMP(s,t));
return 0;
}
KMP算法
最新推荐文章于 2024-10-06 14:10:45 发布