源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-08-20 00:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c语言中使用BF-KMP算法实例
直接上代码
[u]复制代码[/u] 代码如下:
#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算法:%d\n", a);     }     else     {         printf("未匹配\n");     }     if(b != -1)     {         printf("使用KMP算法:%d\n", a);     }     else     {         printf("未匹配\n");     }     system("pause"); }
结果
[u]复制代码[/u] 代码如下:
请输入模式串:lalalalalaaaa 请输入子串:lalaa 使用BF算法:6 使用KMP算法:6 请按任意键继续. . .
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部