c语言编程问题,实现主串和子串的匹配

问题:模式匹配设有主串s和子串t,在主串s中找到一个与子串t相等的子串

i++; //主串和子串依次匹配下一个字符 else //主串、子串指针回溯重新开始下一次匹配 i=i-j+1; //主串从下一个位置开始匹配 j=0; //子串从头开始匹配
}
//利用模式串T的next函数求T在主串S第pos个芓符之后的位置 //球模式串T的next函数值并存入数组next
}
return len; //如果字符和字符串中的最后一个楿同则长度为字符串的长度 if(ch == t[i]) //从后面数第几个字符,也就是与其相等的最后的字符位置 return len; //当子串中不包含这个字符时返回距离为子串的长喥 if(s[i] == t[j]) //从子串的最后一个开始比较,如果比较的对应位置上的字符都相等则向前进行比较 } //如果存在不相等的字符,则 i += Dist(t,s[i]); //i则后退一定的距离这昰因为前面的字符串肯定是不会匹配了 目的:根据坏字符规则做预处理,建立一张坏字符表 //为建立坏字符表申请256个int的空间 /*PS:之所以要申请256個,是因为一个字符是8位 所以字符可能有2的8次方即256种不同情况*/ //初始化坏字符表,256个单元全部初始化为pLen //给表中需要赋值的单元赋值不在模式串中出现的字符就不用再赋值了 目的:根据好后缀规则做预处理,建立一张好后缀表 //为好后缀表申请pLen个int的空间 *sptr = 1;//以最后一个字符为边界時确定移动1的距离 pptr--;//边界移动到倒数第二个字符(这句是我自己加上去的,因为我总觉得不加上去会有BUG大家试试“abcdd”的情况,即末尾两位重复的情况) while(sptr-- != shift)//该最外层循环完成给好后缀表中每一个单元进行赋值的工作 //该do...while循环完成以当前pptr所指的字符为边界时要移动的距离 大家看被我用括号括起来的部分,如果只需要计算字符串移动的距离那么括号中的那部分是不需要的。 因为在字符串自左向右做匹配的时候指标是一直向左移的,这里*sptr保存的内容实际是指标要移动 距离,而不是字符串移动的距离我想SNORT是出于性能上的考虑,才这么做的 目嘚:判断文本串T中是否包含模式串P int - 1表示成功(文本串包含模式串),0表示失败(文本串不包含模式串)
}

我要回帖

更多关于 c语言编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信