字符串的匹配算法

串模式的匹配算法:

  1.使用最基础 的BP算法,也就是从主串开始一个一个遍历字串看主串是否有包含子串,如果有返回其标记的位置。

  代码如下:

    

int BF(char * Findstr,int sizeFindstr,char *str,int sizestr)
{
     if(Findstr == NULL||sizeFindstr<=0||str == NULL|| sizestr<=0||sizeFindstr<sizestr)return -1;
     int i = 0;
     int j =0;
     for(;i<sizeFindstr;i++)n'h
     {
        for(j=0;j<sizestr;j++)
        {
            if(Findstr[i+j]!= str[j])
            {
                break;
            }

        }
        if(j == sizestr)
        {
            return i;
        }
     }
     return -1;
}

2.使用kmp算法,kmp算法是通过去寻找匹配串中重复的元素,用next数组去记入从开始元素到当前元素最大的前后缀的个数,然后在主串和子串匹配时候,如果不符和,则根据next数组进行跳转,

(本文只给出了怎么计算next数组)。

void GetNextArr(char * match,int size,int *arr)
{
    if(match == NULL||size<=0)return ;
    int i = 1;
    int j = 0;
    j=i;
    for(i;i<size;)
    {

        if(match[i] == match[arr[j-1]])      
        {
            arr[i] = arr[j-1]+1;
            i++;
            j=i;

        }else if(arr[j-1]== 0)
        {
            arr[i] = 0;
            i++;
            j=i;
        }else
        {
            j = arr[j-1];
        }

    }

    return ;
}

3.Sunday算法:其申请了以char型大小的next数组,将匹配的字符是从左至右以字符的asic码存入数组,存入的数字为该字符在匹配串的位置,由于是从左至右,所以最后的字符串下标,然后通过这个

next数组去遍历比较;

int  Sunday(char * Findstr,int sizeFindstr,char *str,int sizestr)
{
    if(Findstr == NULL||sizeFindstr<=0||str == NULL|| sizestr<=0)return -1;
    int * arr = (int*)malloc(sizeof(int)*256);
    memset(arr,-1,sizeof(int)*256);
    int i= 0;
    int bj = 0;
    int j = 0;
    int bi = 0;
    for(;i<sizestr;i++)
    {
        arr[str[i]] = i;
    }
    for(i = 0;i<sizeFindstr;)
    {

        if(Findstr[i] == str[j])
        {
            j++;
            i++;
            if(j == sizestr)return bj;
        }else
        {
            if((bj = bj+sizestr+1)<sizeFindstr)
            {
                bj = bj-arr[Findstr[bj]];
                i = bj;
                j = 0;
            }else
            {
                break;
            }
        }
    }
    return -1;

}

猜你喜欢

转载自www.cnblogs.com/Hcu-a/p/9175264.html