模式匹配算法:
#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; //匹配到最后也不成功
}
}