字符串BF和KMP匹配算法
#include <string.h>
#include<stdio.h>
/*
BBC ABCDAB ABCDABCDABDE
搜索词"ABCDABD"*/
//如果pattern存在org中,那么返回的是首次出现的org的角标
//否则返回的是-1
int index(char strOrg[], char strPattern[]) {int i = 0, j = 0;//i是用来推进strOrg,j是用来推进strPattern的int k = -1;//k是用来返回org中的角标的,默认的我们认为不存在int orgLength = strlen(strOrg);int patternLength = strlen(strPattern);int count = 0;while (i < orgLength && j < patternLength) {if (strOrg[i] == strPattern[j]) {//此时,原串不要向下移动,而是从当前位置开始,看是否有匹配的子串存在i++;j++;}else {i = i - j + 1;j = 0;}count++;}printf("本算法运行了%d次\n", count);if (j >= patternLength) {k = i - patternLength;}return k;
}//****************************Beging KMP
#define MAXLENGTH 1024
//部分匹配值的计算
void GetNext(char str[], int next[]) {int j = 0;int k = -1;next[0] = -1;while (j < strlen(str)) {if (k == -1 || str[j] == str[k]) {j++;k++;next[j] = k;}elsek = next[k];}
}int KMPIndex(char strOrg[], char strPattern[]) {int next[MAXLENGTH], i = 0, j = 0, pos = -1;GetNext(strPattern, next);//获得patter串中的每一个字符的部分匹配值int orgLength = strlen(strOrg);int patternLength = strlen(strPattern);int count = 0;while (i < orgLength && j < patternLength) {if (j == -1 || strOrg[i] == strPattern[j]) {i++;j++;}else {j = next[j];}count++;}//printf("\n");printf("本次检索我们一共运行了%d次", count);if (j >= patternLength) {pos = i - patternLength;}return pos;
}//****************************END KMPint main(void) {//printf("%d ", index("BBC ABCDAB ABCDABCDABDE", "ABCDABD"));printf("%d ", KMPIndex("BBC ABCDAB ABCDABCDABDE", "ABCDABD"));getchar();return 0;
}
KMP算法
字符串匹配算法 KMP
#include<stdio.h>
//串的定长顺序存储表示
#define MAXSTRLEN 50 // // 用户可在50以内定义最大串长
#define MAXLEN 255
typedef struct{char ch[MAXLEN+1];
int length;
}SString;
char next[MAXLEN];int indexBF(SString S, SString T, int pos){int i = pos, j = 1;while(i <= S.length && j <= T.length){if(j==0||S.ch[i]==T.ch[j]){i++;j++;}else{j = next[j];}if(j>T.length) return i-T.length;else return 0;
}
}
void getnext(SString T,int next[]){int i,j;
i=1;
next[1]=0;
j=0;
while(i<T.length)
{if(j==0||T.ch[i]==T.ch[j]){++i;++j;next[i]=j;
}
else j=next[j];
}
}
void init(SString &S, char str[]){int i = 0;while(str[i]!='\0'){S.ch[i+1] = str[i];i++;}S.ch[i+1] = '\0';S.ch[0] = i;
}
void printStr(SString Str){for(int i = 1; i <= Str.ch[0]; i++){printf("%c", Str.ch[i]);}printf("\n");
}
void main(){SString S ;init(S, "ababcabcacbab");printStr(S);SString T;init(T, "abcac");printStr(T);int index = indexBF(S, T, 1);printf("index is %d\n", index);
}
字符串BF和KMP匹配算法相关推荐
- 数据结构与算法分析(十六)--- 如何设计更高效的字符串匹配算法?(BF + RK + KMP + BMH)
文章目录 一.Brute Force 匹配算法 二.Rabin–Karp 匹配算法 三.Knuth–Morris–Pratt 匹配算法 四.Boyer-Moore-Horspool 匹配算法 五.字符 ...
- BF、KMP、BM、Sunday算法讲解
原文地址: https://www.cnblogs.com/Syhawk/p/4077295.html BF.KMP.BM.Sunday算法讲解 字串的定位操作通常称作串的模式匹配,是各种串处理系统中 ...
- python 求子字符串_(6)KMP算法(求子串的位置)______字符串的匹配
问题: 已知字符串 B 是字符串 A 的一个子串,问字符串 B 在字符串 A 的第一次出现位置. 暴力方法:从 A 字符串 的每个位置开始对字符串 B 进行匹配. 这种方法根据数据的不同 复杂度不同最 ...
- 朴素匹配算法、KMP匹配算法及其改进【C Program】
之前代码有点小问题,现在可以了~ 朴素匹配算法 原理: 定义主串:CSGOCSDN 定义子串:CSDN 匹配不到就以此后移直至匹配成功或失败. 代码: #include <stdio.h> ...
- 字符串匹配算法(BF、KMP)
BF算法 描述: BF,Brute Force,暴力匹配的意思,是最简单直观的字符串匹配算法.假设有主串s1和子串s2,根据BF算法判断s1是否包含s2的步骤如下: 初始下标指针 i, j 分别指向s ...
- 字符串匹配算法(BF算法KMP算法)
字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...
- 列宽一字符等于多少厘米_字符串匹配算法总结——BF、KMP、BM
说明 以下算法介绍中,被匹配字符串称为主串,匹配模式字符串称为匹配串,索引从0开始. 前缀数组:字符串S = AB(B !== ⏀,即B为任一非空字符串) ,S的前缀指A.前缀数组指所有包含第一个字符 ...
- 字符串匹配算法---BF及KMP
字符串匹配的一般算法(BF) 以 ABSABABCEF 与 ABCE 为例,求串2与串1匹配的第一个位置的下标(这里即输出 5),一般的,我们可以从串1的起始位置开始与串2比较,若相同则两串都 ...
- 字符串匹配算法BF,BM,KMP
字符串匹配bf算法:(暴力穷举算法) 在一个字符串中寻找另一字符串,最容易想到的,也是最简单的办法是:取主串和模式串/搜索串中的每一位依次比较,如果匹配则同时后移一位继续比较,直至匹配到模式串的最后一 ...
最新文章
- python微信红包代码_有了这个再也不担心任何微信红包,Python就是好用
- cuda 判断nan 处理办法
- 【Unity】第8章 GUI开发
- 【元胞自动机】基于matlab元胞自动机车流密度不变下的双向两车道仿真(T 字形路口)【含Matlab源码 1290期】
- 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.3 常见网上开店平台
- 计算机维修技师论文,2016年电工技师论文范文10篇
- 社会统计分析—基础知识
- sql 计算周环比wow_Oracle计算环比的方法
- 【从零开始的SDN学习之路】之闲话Neutron与SDN的联系
- 逻辑回归模型logistic原理详解
- ICPR MTWI 2018挑战赛 网络图像的文本识别之数据预处理
- manjaro安装后需要做的几件事
- 托盘图标在explorer.exe进程退出重启后图标消失(应用程序进程依然存在)的问题
- GitHub加载过慢或加载不出来应该怎么解决
- 太赫兹技术将颠覆公共场所安检方式
- 如何自学维修计算机,怎样快速学习汽车电脑维修?从入门到精通
- BP神经网络在双色球彩票上的预测实验及实现
- 矩阵连乘(java版)
- jQuery仿探探APP手机滑动 卡片切换 特效
- 数据连接 3G ppp pppd