贴上C代码作参考,关于算法,可以参考网上的博文,但不要参考太多,一两篇相近的即可。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* 获取pattern的next数组 */
void get_next(char * pattern, int * next, int len)
{
int i, index;
for (next[]=-, i=; i<len; i++)
{
if (pattern[i] == pattern[next[i-]+])
{
next[i] = next[i-] + ;
continue;
}
for (index=next[i-], next[i]=-; index!=-; index = next[index])
{
if (pattern[index+] == pattern[i])
{
next[i] = index + ;
break;
}
}
}
} int KMP(char * text, int tlen, char * pattern, int plen, int * ptr)
{
int i=, tindex=, pindex=, count=, * next = malloc(sizeof(int) * plen);
get_next(pattern, next, plen);
while (i < tlen)
{
if (pattern[pindex] == text[i])
{
i ++;
pindex ++;
if (pindex == plen)
{
pindex = ;
ptr[tindex++] = i-plen;
}
continue;
}
if (pindex == )
{
i ++;
}
else
{
pindex = next[pindex-] + ;
}
}
free(next);
return tindex;
} /* 按字符读入文件 */
int readText(const char * path, char * buf)
{
FILE * f;
int size;
f = fopen(path, "r");
if (!f)
{
return -;
}
fseek(f, , SEEK_END);
size = ftell(f);
rewind(f);
size = fread(buf, , size, f);
if (size <= )
{
size = -;
}
fclose(f);
return size;
} int main()
{
char text[] = {}, pattern[] = "aba";//"abcabdecabcabcd";
int * ptr, count = , plen, size = readText("file/text.txt", text), i=, j; if (size <= )
{
return -;
}
plen = strlen(pattern);
ptr = malloc((size/plen)*sizeof(int));
count = KMP(text, size, pattern, plen, ptr);
printf("%d results.\n", count);
while (i++ < count)
{
printf("index[%d] : ", i);
for (j=; j<plen; j++)
printf("%c",text[ptr[i-]+j]);
printf("\n======================\n");
}
free(ptr);
return ;
}

KMP算法C代码的更多相关文章

  1. KMP算法的代码实现

    上周算法班的BEN老师花了1个小时讲自动机和KMP的关系,结果failed...明天又要上课了,花了半天时间看了下KMP,暂且停留在利用next求模式中的跳跃长度,自动机那个还不能理解... 具体的可 ...

  2. 字符串匹配(KMP 算法 含代码)

    主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...

  3. KMP算法【代码】

    废话不多说,看毛片算法的核心在于next数组. 很多地方用的都是严书上的方法来求解next数组,代码确实简洁明了,但是可能对于初学者来说不容易想到,甚至不是一下子能理解.(好了,其实我说的就是自己,别 ...

  4. KMP算法具体解释(转)

    作者:July. 出处:http://blog.csdn.net/v_JULY_v/. 引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树.后缀树,包含KMP算法,只有在解 ...

  5. 字符串匹配算法——KMP算法学习

    KMP算法是用来解决字符串的匹配问题的,即在字符串S中寻找字符串P.形式定义:假设存在长度为n的字符数组S[0...n-1],长度为m的字符数组P[0...m-1],是否存在i,使得SiSi+1... ...

  6. 字符串模式匹配KMP算法

    一篇不错的博客:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html KMP字符串模式匹配通俗点说就是一种在一个字符串中 ...

  7. KMP算法解析

    介绍一种高效的KMP算法:代码可以直接运行 #include <iostream> #include <iomanip> using namespace std; void p ...

  8. KMP算法具体解释

    这几天学习kmp算法,解决字符串的匹配问题.開始的时候都是用到BF算法,(BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配 ...

  9. 【字符串算法3】浅谈KMP算法

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...

随机推荐

  1. 调用链系列(1):解读UAVStack中的贪吃蛇

    一.背景 对于分布式在线服务,一个请求需要经过多个系统中多个模块,可能多达上百台机器的协作才能完成单次请求.这种场景下单靠人力无法掌握整个请求中各个阶段的性能开销,更无法快速的定位系统中性能瓶颈.当发 ...

  2. Mysql超详解

    Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令 ...

  3. Java虚拟机详解(五)------JVM参数(持续更新)

    JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...

  4. 导入spark2.3.3源码至intellij idea

    检查环境配置 maven环境 2.检查scala插件 没有的话可以到https://plugins.jetbrains.com/plugin/1347-scala/versions 下载与idea对应 ...

  5. 【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

    利用 Spring Boot Admin 进行项目监控管理 一.Spring Boot Admin 是什么 Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spri ...

  6. .net core 实现 api网关 进行 api版本控制

    场景: 由一次大的项目改动引起的app端api不兼容问题,这时候就需要对api做版本控制了,权衡之后因为用户不多,选择了强更,没人想在已经写了8000行代码的单个svc文件中维护好几个版本的接口或者继 ...

  7. vector function trmplate

    /* vector function template programmer:qpz */ #include <iostream> #include <vector> #def ...

  8. linux 如何初始化密码(解决mysql root用户登录不了的问题)

    这是我遇到的问题 然后就想这可能是mysql安全模式的问题,解决思路:首先改变mysql的安全模式及密码校验问题,jinrumysql后在更改用户名密码. 1.首先将my.ini中加入在[mysqld ...

  9. LightOJ - 1370 Bi-shoe and Phi-shoe 欧拉函数 题解

    题目: Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popula ...

  10. 一块钱哪里去了?--java浮点型背后的故事

    有这样一道智力题:三人住旅馆,老板娘说30元她们付钱后进去了,老板娘想起今天是特价25元,就叫伙计拿5元还给三位顾客,可伙计藏了2元,给了她们3元,这样她们每人得1元,就是说每人付了9元,那3*9=2 ...