手机
当前位置:查字典教程网 >编程开发 >C语言 >c语言中使用BF-KMP算法实例
c语言中使用BF-KMP算法实例
摘要:直接上代码复制代码代码如下:#define_CRT_SECURE_NO_WARNINGS#include#include#include#d...

直接上代码

复制代码 代码如下:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#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算法实例】相关文章:

linux下access函数的用法介绍

c语言实现二叉查找树实例方法

c语言中static的用法详细示例分析

c语言调用汇编的方法

c语言中static和extern的用法详细解析

C语言函数的递归和调用实例分析

c语言 汉诺塔算法代码

c语言中if 语句的作用范围示例代码

C语言中的BYTE和char深入解析

c语言中用位运算实现加法技巧介绍

精品推荐
分类导航