小白一名欢迎大家纠错
#include<stdio.h>
//暴力搜索
int Index_BF(int *a,int *b){
int i,j;
i=j=0;
while(i<10&&j<4){
if(a[i]==b[j]){
i++;
j++;
}else{
i=(i-j)+1;
j=1;
}
}
return i-4;
};
//kmp算法
void search_KMP(char *a,char *b,int *patten,int n){
int index=0;
int i=0;
int j=0;
while(i<n){
if(a[i]==b[j]){
index++;
i++;
j++;
}else{
index=0;
if(j!=0){
j=patten[j-1];
}else{
j=patten[0];
}
if(a[j]!=a[i]){
i++;
}
}
}
if(j==8){
printf("匹配成功!");
}else{
printf("匹配失败");
}
}
int* next_index(char *a,int *patten,int n){
int i=0;
int j=1;
patten[0]=0;
while(j<n){
if(a[i]==a[j]){
patten[j]=patten[j-1]+1;
i++;
}else{
i=0;
if(a[i]==a[j]){
patten[j]=1;
}else{
patten[j]=0;
}
}
j++;
}
return patten;
}
int main(){
//BF算法测试
// int a[10]={1,2,3,4,5,6,7,8,9,10};
// int b[4]= {5,6,7,8};
// int x= Index_BF(a,b);
// printf("%d\n",x);
// printf("***********************");
//KMP算法测试
char c[13]={'a','b','a','a','c','a','b','c','d','a','b','c','a'};
char d[8]= {'a','b','c','d','a','b','c','a'};
int a[8];
int *idx=next_index(d,a,8);
search_KMP(c,d,idx,13);
return 0;
}