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