暴力匹配算法的定长顺序存储实现

#define MAXSTRLEN 255//宏定义串的最大长度MAXSTRLEN为255
typedef unsigned char SString[MAXSTRLEN + 1];//定义SString为无符号字符数组类型,数组长度为256

1.本实验研究串的模式匹配,不用考虑符号,所以将数组元素定义为unsigned char类型
2.数组中0号单元用于存放字符串长度,这样使得字符串中元素的逻辑次序与下标一一对应
3.由于0号单元是unsigned char类型,占8个字节,能表示的最大整数为2^8-1=255,这就要求字符串的长度小于等于255
4.将SString型变量的长度定义为255+1,就使得数组不会溢出

int Index(SString S,SString T,int pos)//暴力匹配函数,在S串(主串)第pos个位置之后找到T串(模式串)第一次出现的位置,返回该位置,若不存在,返回0
{
    int i = pos;
    int j = 1;//从S串第pos个字符与T串第1个字符开始比较,i,j分别表示S串与T串的比较位置

    while(i<=S[0]&&j<=T[0])//i小于等于S串长度,j小于等于T串长度,就进入循环
    {
        if(S[i]==T[j])//当S串中第i个字符与T串中第j个字符比较相等时
        {
            i++;
            j++;//S串与T串的比较位置均后移一位
        }
        else//当S串中第i个字符与T串中第j个字符比较不相等时
        {
            i=i-j+2;//S串中的比较位置退回该次比较的初始位置的后一个位置
            j=1;//T串中的比较位置退回1
        }
    }

    if(j>T[0]) return i-T[0];//当循环是因为T串成功匹配而结束时,i与T串长度的差就等于T串在S串中第pos个字符之后第一次出现的位置,返回i-T[0]
    else return 0;//当循环是因为T串还未完全成功匹配,但S串已匹配结束而结束时,所要求的的位置不存在,返回0
}

测验结果

#本博客参考了《数据结构(C语言版)》(严蔚敏、吴伟民编著)

发布了25 篇原创文章 · 获赞 6 · 访问量 2009

猜你喜欢

转载自blog.csdn.net/weixin_44711653/article/details/97270677