⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 horspool.cpp

📁 此文件夹中共包括十二个小程序 AVL创建平衡二叉树,通过加入一个个的结点创建,并实现了平衡二叉树中的结点删除 Boyer_Moore算法的串模式匹配 Horspool算法的串模式匹配 Grap
💻 CPP
字号:

//Horspool算法实现模式匹配
#include <stdio.h>
#include <stdlib.h>

char P[]={"BARBER"};//模式串存放在数组P中
char T[]={"JIM_SAW_ME_IN_A_BARBERSHOP"};//文本串存放在数组T中
int Table[256];//存放填充移动表
int m,n; //m为模式串长度,n为文本串长度

void ShiftTable(){//生成移动表的函数
	int j;
	for(j=0;j<n;j++)
		Table[T[j]]=m; //移动表中元素初始值设为模式串长度m

	for(j=0;j<m-1;j++) //修改移动表Table中含模式串元素的值
		Table[P[j]]=m-1-j;
}

int Horspool(){
	ShiftTable();//生成移动表
	int k;       //令k为匹配字符的个数
	int i=m-1;   //令i指向模式最右端的位置
	while(i<=n-1){
		k=0;  //匹配字符个数初始值为0
		while((k<=m-1)&&(P[m-1-k]==T[i-k]))//当元素匹配时,匹配个数k增加
			k++;
		if(k==m) //找到匹配的串
			return i-m+1;//返回匹配串的起始位置
		else i=i+Table[T[i]]; //修改i的值,以进行下一轮的比较
	}
	return -1; //没有找到匹配的串
}

void main(){
	int i;
	printf("Horspool算法实现模式匹配:\n");
	printf("文本串:JIM_SAW_ME_IN_A_BARBERSHOP\n模式串:BARBER\n");
	int j;
	for(j=0;P[j]!='\0';j++)
		m=j+1; //m为模式串的长度
//	printf("m=%d",m);
	
	for(j=0;T[j]!='\0';j++)
		n=j+1; //n为文本串的长度
//	printf("n=%d",n);

	i=Horspool(); //Horspool算法实现模式匹配
	if(i!=-1)
		printf("找到匹配的子串,匹配的位置为:%d\n\n",i+1);
	else
		printf("没有找到匹配的子串!\n\n");

	system("PAUSE");
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -