17 串 模式匹配算法

模式匹配算法:

#define MAXSIZE 255

//串的顺序存储结构
typedef struct{
    char ch[MAXSIZE+1];     //存储串的以为数组(必须是 char 型)从下标为1号的元素开始存储
    int length;     //串的当前长度
}SqString;
//模式匹配
//确定主串中所含子串(模式串)第一次出现的位置(定位)
//BF算法:暴力破解,穷举法,简单匹配算法,一个一个比较,
int Index_BF(SqString S, SqString T){     //S:主串  T:模式串
    int i=1, j=1;
    while(i<=S.length && j<=T.length){
        if(S.ch[i] == T.ch[j]){     //若主串和子串匹配,则各自的游标i,j分别后移
            i++;                            //如果能成功匹配,则i,j的值会一直增加,知道大于或等于T.length,然后退出while循环
            j++;
        }else{      //匹配失败,说明子串和当前下标开始的主串的一段不匹配,回溯
            i = i-j+2;      //核心算法,两串的游标分别回到位置,为下一次匹配做准备
            j=1;
        }
    }
    //匹配结束
    /*
        包含两个可能,一:找到了符合匹配条件的串的位置(j>T.length); 二:匹配失败
    */
    if(j>T.length){
        return (i-T.length);        //匹配成功,返回主串中匹配到的第一个字符的下标
    }else{
        return 0;       //匹配到最后也不成功
    }
}
原文地址:https://www.cnblogs.com/CPU-Easy/p/11727502.html