• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > c语言中使用BF-KMP算法实例

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言算法实例大全,c语言贪心算法实例,c语言算法实例,c语言递归算法实例,遗传算法c语言实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

直接上代码

#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");
}
</div>

结果
</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C 语言插入排序算法及实例代码
  • C语言选择排序算法及实例代码
  • C语言中使用快速排序算法对元素排序的实例详解
  • C语言的冒泡排序和快速排序算法使用实例
  • C语言的数字游戏算法效率问题探讨实例
  • c语言中使用BF-KMP算法实例

相关文章

  • 2017-05-28深入解读C++中的指针变量
  • 2017-05-28深入解析C++中类的多重继承
  • 2017-05-28C++线程同步实例分析
  • 2017-05-28c语言获取文件大小的示例
  • 2017-05-28linux之sed命令的用法
  • 2017-05-28C语言 指针与数组的详解及区别
  • 2017-05-28VC中Tab control控件的用法详细解析
  • 2017-05-28深入C++实现函数itoa()的分析
  • 2017-05-28linux c语言操作数据库(连接sqlite数据库)
  • 2017-05-28基于C语言char与unsigned char的区别介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 利用反射获得类的public static/const成员的值实例
    • 详解C++中的vector容器及用迭代器访问vector的方法
    • C语言实现用户态线程库案例
    • C语言中的strdup()函数和其与strcpy()函数的区别
    • 详解C语言中的rename()函数和remove()函数的使用方法
    • c++学习之构造函数
    • 基于C语言实现的扫雷游戏代码
    • 在C语言中调用C++做的动态链接库
    • Hdu 6162 Ch’s gift【思维+树链剖分+线段树】
    • 初学C++之自定义类型名简化详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有