C语言

c语言中使用BF-KMP算法实例

时间:2024-10-15 01:06:31 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算法:%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算法实例】相关文章:

C语言中使用快速排序算法对元素排序的实例03-18

C语言插入排序算法及实例代码12-05

C语言选择排序算法及实例代码11-25

Swift与C语言指针结合使用实例03-29

C语言实现归并排序算法实例04-01

C语言输出旋转后数组中的最小数元素的算法原理与实例04-02

C语言数组实例解析03-28

C语言快速排序实例代码06-04

C语言条件编译分析实例03-30