【数据结构】BF和KMP算法

BF算法

#include<iostream>
using namespace std;
//#include <string.h>    //字符串处理
#define MAXSIZE 255
//串的定长顺序存储结构
typedef struct {
	char ch[MAXSIZE+1];
	int length;
} SString;

//bf算法
int IndexBF(SString S,SString T) {
	//从主串和模式串的第一个开始比较,因为第一个字符下标是0,所以i=0,j=0 
	int i=0;
	int j=0;
	int count = 0; 
	//当所有字符比较完后就跳出循环	下标从0开始,对应长度就减一 
	while(i<=S.length-1 && j<=T.length-1) {
		if(S.ch[i]==T.ch[j]) {
			++i;	//匹配上就都比较下一个字符 
			++j;
			count++;
		} else {
			i = i-j+1;	//匹配不上,i移动到下一个字符,j从头开始 
			j=0;
		}
	}
	//当模式串的j>T.length-1,说明模式串的所有字符都匹配到主串中的一个连续字符序列,
	//	匹配成功,返回匹配上的第一字符在主串中的位置 
	if(j>T.length-1) return count;	//其实是i-(T.length-1) 得到匹配上的第一字符在主串中的位置 
	else return 0;
}

//主函数
int main() {
	//输入主串和模式串
	SString S,T;
	cout<<"输入主串和主串长度(中间用空格隔开)"<<endl;
	cin >>S.ch>>S.length;
	cout<<"输入模式串和模式串的长度(中间用空格隔开)"<<endl;
	cin >>T.ch>>T.length;
	//调用bf算法
	cout<<"恭喜你,在主串的第"<<IndexBF(S,T)<<"个字符开始匹配上了"<<endl;
} 

KMP算法

#include<iostream>
using namespace std;
#include <string.h>    //字符串处理
#define MAXSIZE 255

//串的定长顺序存储结构
typedef struct {
	char ch[MAXSIZE+1];
	int length;
} SString;
//计算next的值
void getNext(SString T,int next[]) {
	int i=1;
	next[1]=0;
	int j=0;
	while(i<T.length) {
		if(j==0 || T.ch[i]==T.ch[j]) {
			++i;
			++j;
			next[i]=j; 
		} else
		{
			j=next[j];
		}
	}
} 
//kmp算法
int IndexKMP(SString S,SString T) {
	int i=0;
	int j=0;
	int next[T.length];
	while(i<=S.length-1 && j<=T.length-1) {
		if(j==0 || S.ch[i]==T.ch[j]) {
			++j;
			++i;
		} else 
		{
			getNext(T,next);
			j=next[j];
		}
	}
	if(j>T.length-1) return i-T.length+1;
	else return 0; 
} 

//主函数
int main() {
	SString S,T;
	cout<<"输入主串长度和主串(中间用空格隔开)"<<endl;
	cin >>S.length>>S.ch;
	cout<<"输入模式串的长度和模式串(中间用空格隔开)"<<endl;
	cin >>T.length>>T.ch;
	//调用bf算法
	cout<<IndexKMP(S,T)<<endl;
} 

相关推荐

  1. 数据结构BFKMP算法

    2024-07-16 15:06:01       22 阅读
  2. 数据结构-KMP算法

    2024-07-16 15:06:01       106 阅读
  3. 数据结构KMP算法

    2024-07-16 15:06:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 15:06:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 15:06:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 15:06:01       58 阅读
  4. Python语言-面向对象

    2024-07-16 15:06:01       69 阅读

热门阅读

  1. 数据结构专项-字符串

    2024-07-16 15:06:01       20 阅读
  2. Python编程实例-使用urllib3进行HTTP请求详解

    2024-07-16 15:06:01       20 阅读
  3. [ptrade交易实战] 第十四篇 公共交易函数 (2)

    2024-07-16 15:06:01       29 阅读
  4. 数据库系统概论:初识数据库

    2024-07-16 15:06:01       21 阅读
  5. Sqlmap中文使用手册 - Optimization模块参数使用

    2024-07-16 15:06:01       26 阅读
  6. 智能招聘系统的AI功能解析

    2024-07-16 15:06:01       23 阅读
  7. 若依分离版 后端自定义分页

    2024-07-16 15:06:01       22 阅读
  8. Elasticsearch索引映射定义

    2024-07-16 15:06:01       19 阅读