xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 4KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-05-20
  • 語言: C/C++
  • 標(biāo)簽: BM算法??

資源簡介

BM算法 c語言實現(xiàn) 詳細(xì)注解 高手作品

資源截圖

代碼片段和文件信息

#include
#include
/*
函數(shù):int?*MakeSkip(char?*int)
目的:根據(jù)壞字符規(guī)則做預(yù)處理,建立一張壞字符表
參數(shù):
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? {
*(skip+i)?=?plen;
}
while(plen?!=?0)
{
*(skip+(unsigned?char)*ptrn++)?=?plen--;
}

//輸出壞字表
/* for(i?=?1;?i? {
printf(“%d“*(skip+i));
printf(“%s“*(skip+i));
}
*/
return?skip;
}

/*
函數(shù):int?*MakeShift(char?*int)
目的:根據(jù)好后綴規(guī)則做預(yù)處理,建立一張好后綴表
參數(shù):
ptrn?=>?模式串P
plen?=>?模式串P長度
返回:
int*?-?好后綴表
*/
int?*MakeShift(char?*ptrnint?plen)
{
int?*shift?=?(int?*)malloc(plen*sizeof(int));
int?*sptr?=?shift?+?plen?-?1;//方便給好后綴表賦值的指標(biāo)(指向申請空間最后一個字符)
char?*pptr?=?ptrn?+?plen?-1;//記錄邊界位置(指向P最后一個字符)Search中調(diào)用此表時,傳入?yún)?shù)為邊界值,所以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--;//邊界移動到倒數(shù)第二個字符(作者添加的)
while(sptr--?!=?shift)//該最外層循環(huán)完成給好后綴表中每一個單位進行賦值的工作
{
//該do..while循環(huán)完成以當(dāng)前pptr所指的字符為邊界時,要移動的距離
do{
while(p1?>=?ptrn?&&?*p1--?!=?c);//該空循環(huán),尋找與最后一個字符C匹配的字符所指向的位置
p2?=?ptrn?+?plen?-2;
p3?=?p1;
while(p3?>=?ptrn?&&?p2?>=?pptr?&&?*p3--?==?*p2--);//該空循環(huán),判斷在邊界內(nèi)字符匹配到了什么位置************************執(zhí)行一個條件,減減一次
}while(p3?>=?

評論

共有 條評論

相關(guān)資源