资源简介
BM算法 c语言实现 详细注解 高手作品
代码片段和文件信息
#include
#include
/*
函数:int *MakeSkip(char *int)
目的:根据坏字符规则做预处理,建立一张坏字符表
参数:
ptrn => 模式串P
plen => 模式串P长度
返回:
int* - 坏字符表
*/
int *MakeSkip(char *ptrnint plen)
{
int i;
//为建立坏字表,申请256 int空间
/*一个字符8位所有字符2的八次方即256*/
int *skip = (int*)malloc(256*sizeof(int));
if(skip == NULL)
{
printf(“%s““malloc failed!“);
return 0;
}
for(i = 0; i < 256; i++ )
{
*(skip+i) = plen;
}
while(plen != 0)
{
*(skip+(unsigned char)*ptrn++) = plen--;
}
//输出坏字表
/* for(i = 1; i < 256; i++ )
{
printf(“%d“*(skip+i));
printf(“%s“*(skip+i));
}
*/
return skip;
}
/*
函数:int *MakeShift(char *int)
目的:根据好后缀规则做预处理,建立一张好后缀表
参数:
ptrn => 模式串P
plen => 模式串P长度
返回:
int* - 好后缀表
*/
int *MakeShift(char *ptrnint plen)
{
int *shift = (int *)malloc(plen*sizeof(int));
int *sptr = shift + plen - 1;//方便给好后缀表赋值的指标(指向申请空间最后一个字符)
char *pptr = ptrn + plen -1;//记录边界位置(指向P最后一个字符)Search中调用此表时,传入参数为边界值,所以PPTR用于防止过多的匹配
char c;
char *p1 = ptrn + plen - 2 *p2 *p3;
if(shift == NULL)
{
printf(“%s““malloc failed!“);
return 0;
}
c = *(ptrn + plen - 1);//保存模式串中最后一个字符
*sptr = 1;//以最后一个字符为边界时,确定移动1的距离
pptr--;//边界移动到倒数第二个字符(作者添加的)
while(sptr-- != shift)//该最外层循环完成给好后缀表中每一个单位进行赋值的工作
{
//该do..while循环完成以当前pptr所指的字符为边界时,要移动的距离
do{
while(p1 >= ptrn && *p1-- != c);//该空循环,寻找与最后一个字符C匹配的字符所指向的位置
p2 = ptrn + plen -2;
p3 = p1;
while(p3 >= ptrn && p2 >= pptr && *p3-- == *p2--);//该空循环,判断在边界内字符匹配到了什么位置************************执行一个条件,减减一次
}while(p3 >=
- 上一篇:C语言和汇编语言的混合编程
- 下一篇:C语言编写modbus
相关资源
- c语言实现的发送邮件
- RC4加解密 C语言实现
- C语言实现ARP攻击
- c语言实现找零钱问题
- C语言实现心跳包Heart Beat
- 表达式求值C语言实现
- 矩阵运算C语言实现
- 纯C语言实现工资管理系统
- c语言实现获取文件的md5哈希值
- 文件系统c语言实现,在linux下编译
- B树 C语言实现
- linux下用C语言实现寻找1到1亿内的素数
- linux下C语言实现简易web服务器
- SM2_SM3_SM4_C语言实现+SM3_C++实现+国家密
- linux下C语言实现读者写者写者优先
- 通讯录管理程序设计的C语言实现
- 用C语言实现的TCP服务器与客户端源代
- AES任意文件长度加解密C语言实现
- C语言实现A*算法解决传教士和野人渡
- C语言实现F算法 最短路径算法
- C语言实现高并发http文件上传服务器
- FIR的DSP实现C语言实现
- AES128 C语言实现源码及应用例程
- c语言实现 FCFS和SJF调度算法
- 原创modbus 协议c实现 C 语言 实现功能
- 表达式求值C语言实现《数据结构》课
- C语言实现FFT(快速傅里叶变换)
- c语言实现的电子词典
- 火车订票系统用c语言实现
- C语言实现校园导航系统
评论
共有 条评论