horspool字符串匹配算法,纠错

时间:2022-11-09 19:02:06
如题,本人小白,未发现错误,故请教高人。

int horspool(const char* t,const char* p)
 {//t=Text,p=pattern,m=strlen(p),n=strlen(t)
    int m=strlen(p),n=strlen(t);
    int d[256];//256=2^8
    memset(d,m,sizeof(d));//initialize d[c] to m
    int pos=0;//pos=position

    //preprocessing
    for (int j = 0; j < m-1; ++j)
    {
        d[ p[j] ]=(m-1)-j;
    }
    //searching    
    while (pos<=n-m)//arrive at EOF
    {
        int j=m-1;//from right to left

        while(j>-1 && t[pos+j]==p[j])//get a match
            j--;
        if (j==-1)//match all
        {
            return pos+1;
        }
        pos+=d[ t[pos+(m-1)] ];            
    }
    return -1;//not match 'p' in 't' 
 }

6 个解决方案

#1


没看到过 这种算法,前来学习。。。

#2


引用 1 楼 luoxuechengbing 的回复:
没看到过 这种算法,前来学习。。。

浪费我激动地表情。。。
还以为有人帮忙找到了呢

#3


memset(d,m,sizeof(d));
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;

#4


3L正解,就错在memset(d,m,sizeof(d));上,改成循环赋值就ok了

#5


step by step debug

#6


嗯,已解决,多谢

#1


没看到过 这种算法,前来学习。。。

#2


引用 1 楼 luoxuechengbing 的回复:
没看到过 这种算法,前来学习。。。

浪费我激动地表情。。。
还以为有人帮忙找到了呢

#3


memset(d,m,sizeof(d));
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;

#4


3L正解,就错在memset(d,m,sizeof(d));上,改成循环赋值就ok了

#5


step by step debug

#6


嗯,已解决,多谢