bf和kmp算法的c语言实现,c语言中使用BF-KMP算法实例

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#define MAX_SIZE 255    //定义字符串的最大长度

typedef unsigned char SString[MAX_SIZE];//数组第一个保存长度

//BF

int BFMatch(char *s,char *p)

{

int i,j;

i=0;

while(i < strlen(s))

{

j=0;

while(s[i]==p[j]&&j < strlen(p))

{

i++;

j++;

}

if(j==strlen(p))

return i-strlen(p);

i=i-j+1;                //指针i回溯

}

return -1;

}

//getNetx

void getNext(char *p,int *next)

{

int j,k;

next[0]=-1;

j=0;

k=-1;

while(j < strlen(p)-1)

{

if(k==-1||p[j]==p[k])    //匹配的情况下,p[j]==p[k]

{

j++;

k++;

next[j]=k;

}

else

{                  //p[j]!=p[k]

k=next[k];

}

}

}

//KMP

int KMPMatch(char *s,char *p)

{

int next[100];

int i,j;

i=0;

j=0;

getNext(p,next);

while(i < strlen(s))

{

if(j==-1||s[i]==p[j])

{

i++;

j++;

}

else

{

j=next[j];       //消除了指针i的回溯

}

if(j==strlen(p))

{

return i-strlen(p);

}

}

return -1;

}

int main()

{

int a, b;

char s[MAX_SIZE], p[MAX_SIZE];

printf("请输入模式串:");

scanf("%s", &s);

printf("请输入子串:");

scanf("%s", &p);

a = BFMatch(s, p);

b = KMPMatch(s, p);

if(a != -1)

{

printf("使用BF算法:%d\n", a);

}

else

{

printf("未匹配\n");

}

if(b != -1)

{

printf("使用KMP算法:%d\n", a);

}

else

{

printf("未匹配\n");

}

system("pause");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值