bf和kmp算法同时匹配c语言,c语言中关于使用BF-KMP算法实例

本文通过实例展示了如何在C语言中使用 Boyer-Moore (BF) 算法和 Knuth-Morris-Pratt (KMP) 算法进行字符串匹配,以查找模式串'lala'在输入字符串'lalalalalaaaa'中的位置。两种算法在处理效率上有差异,展示了它们在实际编程中的应用场景。
摘要由CSDN通过智能技术生成

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算法:%dn", a);

}

else

{

printf("未匹配n");

}

if(b != -1)

{

printf("使用KMP算法:%dn", a);

}

else

{

printf("未匹配n");

}

system("pause");

}

结果

复制代码 代码如下:

请输入模式串:lalalalalaaaa

请输入子串:lalaa

使用BF算法:6

使用KMP算法:6

请按任意键继续. . .

【c语言中关于使用BF-KMP算法实例】相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值