栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

串BF+KMP(作业)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

串BF+KMP(作业)

#include 
#include 
#include 
#define MAXSIZE 100
using namespace std;
 
#define N 100
 
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef char ElemType;
typedef int Status;
 
typedef struct   //串的堆式顺序存储结构 
{
	char *ch;   //若是非空串,则按串长分配存储区,否则ch为NULL
	int length; //串的当前长度 
}HString; 
//00 初始化 
Status InitString(HString &H)
{
	H.ch=new ElemType [MAXSIZE];
	H.ch[0]='O';
	if(!H.ch)   exit(OVERFLOW);
	H.length=0;
	return OK;
}
//01 创建串 
Status CreateString (HString &H,int len)
{
	char x;
	for(int i=1;i<=len;i++)
	{
		cin>>x;
		H.ch[i]=x;
	}
	H.length=len;
	return OK;
 } 
Status DisPlay(HString &H)
{
	printf("打印串:") ; 
	for(int i=1;i<=H.length;i++)
	{
		printf("%c",H.ch[i]);
	}
	printf("n");
	return OK;
}
//02 实现BF模式匹配算法
int Index_BF(HString S,HString T,int &pos) 
{
	int i=1,j=1,sum=0;
	while(i<=S.length && j<=T.length)//两个串均比较到末尾 
	{
		sum++; 
		if(S.ch[i]==T.ch[j])
		{
			++i;
			++j;//继续比较后继字符 
		}
		else //指针退后重新开始比较 
		{
			i=i-(j-1)+1;
			j=1;
		}
	}
	     cout<<"BF一共比较了"<T.length) 
		{
		   pos=i-T.length;
		   return i-T.length;//匹配成功
		}
		else return 0;//匹配失败 
}
//03 实现KMP模式匹配算法
int Index_KMP(HString S,HString T,int &pos,int next[]) 
{

	int i=1;
	int j=1;
	int sum=0;
	while(i<=S.length && j<=T.length)//两个串均比较到末尾 
	{
		sum++; 
		if(j==0||S.ch[i]==T.ch[j])
		{
			++i;++j;//继续比较后继字符 
		}
		else
		j=next[j];
	}
	 cout<<"KMP一共比较了"<T.length)  
	{
		pos=i-T.length;
	    return i-T.length;//匹配成功
	}
	else return 0;//匹配失败 
}
void get_next(HString T,int next[])
{
	next[1]=0;
	int m,j;
	m=0; //m=next[1],m代表的是前缀结束时的下标,也就是相似度,T1...Tm(m个字符) 
	j=1; //j代表的是后缀末尾的下标,Tj-m+1...Tj(m个字符)  ++j后即所求next[j] 
	while(j 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511683.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号