最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年11月26日 09:22:35   作者:  
這篇文章主要介紹了c語言中使用BF-KMP算法,大家參考使用

直接上代碼

復(fù)制代碼 代碼如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_SIZE 255    //定義字符串的最大長度

typedef unsigned char SString[MAX_SIZE];//數(shù)組第一個保存長度
//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");
}

結(jié)果

復(fù)制代碼 代碼如下:

請輸入模式串:lalalalalaaaa
請輸入子串:lalaa
使用BF算法:6
使用KMP算法:6
請按任意鍵繼續(xù). . .

相關(guān)文章

  • C語言計算日期差的方法示例

    C語言計算日期差的方法示例

    這篇文章主要介紹了C語言計算日期差的方法,結(jié)合具體實例形式分析了C語言針對日期轉(zhuǎn)換、運算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    strcpy和memcpy都是標(biāo)準(zhǔn)C庫函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過本文重點給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯,感興趣的朋友一起看下吧
    2016-08-08
  • C語言實現(xiàn)小型工資管理系統(tǒng)

    C語言實現(xiàn)小型工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)小型工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++中繼承(inheritance)詳解及其作用介紹

    C++中繼承(inheritance)詳解及其作用介紹

    這篇文章主要介紹了C++中繼承(inheritance)詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++中的類成員函數(shù)當(dāng)線程函數(shù)

    C++中的類成員函數(shù)當(dāng)線程函數(shù)

    這篇文章主要介紹了C++中的類成員函數(shù)當(dāng)線程函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 純C語言:折半查找源碼分享

    純C語言:折半查找源碼分享

    這篇文章主要介紹了純C語言:折半查找源碼,有需要的朋友可以參考一下
    2014-01-01
  • 詳解C++虛函數(shù)中多態(tài)性的實現(xiàn)原理

    詳解C++虛函數(shù)中多態(tài)性的實現(xiàn)原理

    C++是一種面向?qū)ο蟮木幊陶Z言,在C++中,虛函數(shù)是實現(xiàn)多態(tài)性的關(guān)鍵。本文就來探討一下C++虛函數(shù)中多態(tài)性的實現(xiàn)原理及其在面向?qū)ο缶幊讨械膽?yīng)用吧
    2023-05-05
  • C++實現(xiàn)折半插入排序(BinaryInsertSort)

    C++實現(xiàn)折半插入排序(BinaryInsertSort)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)折半插入排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++簡單實現(xiàn)shared_ptr的代碼

    C++簡單實現(xiàn)shared_ptr的代碼

    智能指針用于資源管理,為了保證資源的操作得到順利的執(zhí)行防止資源泄露,因此大多數(shù)實現(xiàn)都以noexcept在參數(shù)列表后聲明為不拋出異常,這篇文章主要介紹了C++簡單實現(xiàn)shared_ptr的代碼,需要的朋友可以參考下
    2022-09-09
  • QT實現(xiàn)QMessageBox中文按鈕示例詳解

    QT實現(xiàn)QMessageBox中文按鈕示例詳解

    這篇文章主要為大家詳細(xì)介紹了QT實現(xiàn)QMessageBox中文按鈕的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11

最新評論

铅山县| 松江区| 普兰店市| 贺兰县| 马山县| 东宁县| 禹城市| 荣成市| 元谋县| 云和县| 额尔古纳市| 湟中县| 六枝特区| 五大连池市| 多伦县| 丰城市| 和政县| 永善县| 深泽县| 永宁县| 胶州市| 临桂县| 治县。| 浙江省| 长白| 会同县| 通化市| 治多县| 营山县| 陈巴尔虎旗| 东乡县| 宁陕县| 淅川县| 平陆县| 德保县| 沧州市| 亳州市| 东宁县| 黄冈市| 边坝县| 临泽县|