zoukankan      html  css  js  c++  java
  • 字符串匹配算法实现

    KMP算法

     1 void Next(char *src,int n,int *next)
     2 {
     3 int j,k;
     4 j=0;
     5 k=-1;
     6 next[0] = -1;
     7 while(j<n-1)
     8 {
     9 if(k==-1 || src[j] == src[k])
    10 {
    11 ++k;++j;
    12 next[j] = k;
    13 }
    14 else
    15 k=next[k];
    16 }
    17 }
    18 
    19 int KMP(char *des,int n ,char *src,int m)
    20 {
    21 assert(des != NULL && src !=NULL && n>0 && m>0);
    22 
    23 char *pdes=des;
    24 char *psrc=src;
    25 
    26 int i=0,j=0;
    27 int *next = (int *)malloc(m*sizeof(int));
    28 Next(src,m,next);
    29 for(int k = 0;k<m;k++)
    30 printf("%d ",next[k]);
    31 printf("
    ");
    32 
    33 while(j<m && i<n)
    34 {
    35 if(j==-1 || psrc[j] == pdes[i])
    36 {
    37 ++i;++j;
    38 }
    39 else
    40 {
    41 j=next[j];
    42 }
    43 }
    44 if(j<m)
    45 return -1;
    46 else
    47 return i-j;
    48 }

    BF算法

     1 int BF(const char *des,const char *src)
     2 {
     3 assert(des != NULL && src != NULL);
     4 int i,j;
     5 int len_1 = strlen(des);
     6 int len_2 = strlen(src);
     7 if(len_1 < len_2)
     8 return -1;
     9 for(i = 0;i<=len_1-len_2;i++)
    10 {
    11 for(j=0;j<len_2;j++)
    12 {
    13 if(des[i+j] != src[j])
    14 break;
    15 }
    16 if(j==len_2)
    17 return i;
    18 }
    19 return -1;
    20 }
  • 相关阅读:
    Play!:SBT代理设置
    CentOS:Oracle最大连接数问题
    STM32:CooCox IDE环境搭建 点亮LED
    删除con.dat
    几种汉字字体推荐
    Python:print输出中文
    Asp.Net:上传文件
    一梦
    身份证验证规则
    git 进阶
  • 原文地址:https://www.cnblogs.com/susidian/p/10013146.html
Copyright © 2011-2022 走看看