资源简介
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语言实现
- 操作系统课设 读写者问题 c语言实现
- 3des加密算法C语言实现
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- 线性回归算法c语言实现
- 用C语言实现的一个打字游戏
- C语言实现的DES对称加密算法
- 用C语言实现高效日志
- C语言实现十进制转十六进制
- 文件传输和聊天程序(c语言实现)
- 基于C语言实现的网络爬虫(搜索引擎
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- C语言实现 设备信息管理系统
- 2048小游戏c语言实现
- C语言实现的航空售票系统
- 简单通讯录C语言实现
- C语言实现栈操作
- C语言实现的银行家算法 做了界面
- filtfilt C语言实现,可直接运行验证
- 用C语言实现一个火车站的订票系统
- 多表代换 加密解密 C语言实现
- c语言实现的商品进销存管理系统
- 公交车查询系统C语言实现
- 赋值语句翻译c语言实现四元式
- c语言实现bch编码
- 椭圆曲线ECC加密解密算法的c语言实现
- 语法分析c语言实现程序代码+实验报告
评论
共有 条评论