<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    c語言中使用BF-KMP算法實例

    時間:2025-01-16 07:27:05 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語言冒泡排序算法實例06-15

    C語言中使用快速排序算法對元素排序的實例06-20

    C語言中實現KMP算法實例08-09

    C語言奇偶排序算法詳解及實例代碼10-30

    C語言選擇排序算法及實例代碼07-25

    C語言插入排序算法及實例代碼07-02

    Swift與C語言指針結合使用實例09-21

    C語言實現歸并排序算法實例09-18

    C++選擇排序算法實例09-26

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人