zoukankan      html  css  js  c++  java
  • Algorithm Gossip (11) KMP字符串匹配

    跳转

    字符串匹配: 跳转到我的博文
    KMP算法 实现字符串匹配

    http://blog.csdn.net/actanble/article/details/53024717

    前言

    This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。

    提出问题

    Algorithm Gossip: 字串核对
    字符串匹配: 跳转到我的博文 KMP算法 实现 字符串匹配http://blog.csdn.net/actanble/article/details/53024717

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void table(char*);// 建立前进表
    int search(int,char*, char*);// 搜寻关键字
    void substring(char*,char*,int,int);// 取出子字串
    int skip[256];
    int main(void) {
        char str_input[80];
        char str_key[80];
        char tmp[80] = {''};
        int m, n, p;
        printf("请输入字串:");
        gets(str_input);
        printf("请输入搜寻关键字:");
        gets(str_key);
        m = strlen(str_input);// 计算字串长度
        n = strlen(str_key);
        table(str_key);
        p = search(n-1,str_input,str_key);
        while(p != -1) {
            substring(str_input,tmp, p, m);
            printf("%s
    ", tmp);
            p = search(p+n+1,str_input,str_key);
        }
        printf("
    ");
        return 0;
    }
    
    void table(char *key) {
        int k, n;
        n = strlen(key);
        for(k = 0; k <= 255;k++)
            skip[k] = n;
        for(k = 0; k < n - 1; k++)
            skip[key[k]] = n - k - 1;
    }
    
    int search(int p, char* input,char* key) {
        int i, m, n;
        char tmp[80] = {''};
        m = strlen(input);
        n = strlen(key);
        while(p < m) {
            substring(input,tmp, p-n+1,p);
            if(!strcmp(tmp, key)) // 比较两字串是否相同
                return p-n+1;
            p += skip[input[p]];
        }
        return -1;
    }
    void substring(char *text,char* tmp, int s, int e) {
        int i, j;
        for(i = s, j = 0; i <= e; i++, j++)
            mp[j] = text[i];
        tmp[j] = '';
    }   

    分析和解释

    代码

    拓展和关联

    后记

    参考书籍

    • 《经典算法大全》
    • 维基百科
  • 相关阅读:
    iOS input disabled显示不清楚
    钉钉小程序——JSAPI
    留言板
    友链
    mysql---存储引擎
    union与limit
    spring--setter注入
    spring---生命周期
    sql03-连接查询
    sql01--认识表
  • 原文地址:https://www.cnblogs.com/actanble/p/6713405.html
Copyright © 2011-2022 走看看