欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語(yǔ)言中使用BF-KMP算法實(shí)例

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

直接上代碼

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

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

#define MAX_SIZE 255    //定義字符串的最大長(zhǎng)度

typedef unsigned char SString[MAX_SIZE];//數(shù)組第一個(gè)保存長(zhǎng)度
//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("請(qǐng)輸入模式串:");
    scanf("%s", &s);
    printf("請(qǐng)輸入子串:");
    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ù)制代碼 代碼如下:

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

相關(guān)文章

  • VS中動(dòng)態(tài)庫(kù)的創(chuàng)建和調(diào)用方式詳解

    VS中動(dòng)態(tài)庫(kù)的創(chuàng)建和調(diào)用方式詳解

    庫(kù)的存在形式本質(zhì)上來(lái)說(shuō)庫(kù)是一種可執(zhí)行代碼的二進(jìn)制,? 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別主要是在鏈接階段處理庫(kù)的方式不同而區(qū)分的,本文介紹VS中動(dòng)態(tài)庫(kù)的創(chuàng)建和調(diào)用方式,感興趣的朋友一起看看吧
    2024-01-01
  • C語(yǔ)言中查詢進(jìn)程信號(hào)是否被遮罩或擱置的簡(jiǎn)單方法

    C語(yǔ)言中查詢進(jìn)程信號(hào)是否被遮罩或擱置的簡(jiǎn)單方法

    這篇文章主要介紹了C語(yǔ)言中查詢進(jìn)程信號(hào)是否被遮罩或擱置的簡(jiǎn)單方法,包括sigprocmask函數(shù)和sigpending函數(shù)的簡(jiǎn)介,需要的朋友可以參考下
    2015-09-09
  • 使用C++中的ADO對(duì)SQLite進(jìn)行增刪改查

    使用C++中的ADO對(duì)SQLite進(jìn)行增刪改查

    本文將介紹如何使用C++的ADO (ActiveX Data Objects)對(duì)SQLite數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-06-06
  • C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)

    C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)

    C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)呢?下面小編就大家詳細(xì)的介紹一下。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • 深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    深入了解C語(yǔ)言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言字符/字符串的相關(guān)函數(shù),文中通過(guò)示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C++如何保存bmp圖片

    C++如何保存bmp圖片

    這篇文章主要介紹了C++如何保存bmp圖片問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • c++中vector的使用和模擬實(shí)現(xiàn)

    c++中vector的使用和模擬實(shí)現(xiàn)

    這篇文章主要介紹了c++中vector的使用和模擬實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • C++超詳細(xì)介紹模板

    C++超詳細(xì)介紹模板

    人們需要編寫(xiě)多個(gè)形式和功能都相似的函數(shù),因此有了函數(shù)模板來(lái)減少重復(fù)勞動(dòng);人們也需要編寫(xiě)多個(gè)形式和功能都相似的類(lèi),于是 C++ 引人了類(lèi)模板的概念,編譯器從類(lèi)模板可以自動(dòng)生成多個(gè)類(lèi),避免了程序員的重復(fù)勞動(dòng)
    2022-07-07
  • 最新評(píng)論