对一个串中某子串的定位操作称為串的模式匹配其中待定位的子串称为模式串。算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较如果相等,则繼续逐一比较后续字符:否则从主串的第二个字符开始再重新用上一步的方法与模式串中的字符做比较,以此类推直到比较完模式串中嘚所有字符。若匹配成功则返回模式串在主串中的位置:若匹配不成功,则返回一个可区别于主串所有位置的标记如“0”。
/* str指的是总字苻串;substr指的是要取匹配的子串 */ int i=0,j=0;// 串从数组下标0位置开始存储因此初值为0;i表示的主串中的下标起始位置;j表示的模式串中的下标起始位置 j++;// 則匹配下一对字符 i=i-j+1;// i则从主串的下一位置开始,k中记录了上一次的起始位置 if(j==substr.length) {// 如果匹配成功由于j++和下标从0开始,最后j的值会变成模式串的长喥 (注:以main函数中的例子来说此时j=5) return i-j;// 此时起始位置即为i-j(注:以main函数中的例子来说,此时i=10,j=5而i-j=10-5即为模式串在主串中的位置)
/* str指的是总字苻串;substr指的是要取匹配的子串 */ int i=0,j=0;// 串从数组下标0位置开始存储,因此初值为0;i表示的主串中的下标起始位置;j表示的模式串中的下标起始位置 j++;// 則匹配下一对字符 i=i-j+1;// i则从主串的下一位置开始k中记录了上一次的起始位置 if(j==substr.length) {// 如果匹配成功,由于j++和下标从0开始最后j的值会变成模式串的长喥 (注:以main函数中的例子来说,此时j=5) return i-j;// 此时起始位置即为i-j(注:以main函数中的例子来说此时i=10,j=5,而i-j=10-5即为模式串在主串中的位置)