题目
已知串采用定长顺序存储结构如下,请将下列串的简单模式匹配算法补充完整。typedef struct( char ch[MAXLEN+1];/存储串的一维数组,0号不用 int length;/串的长度)SString;int Index_BF(SString S,SString T,int pos)( i=pos; j=1; while(i<=S.length && j<=T.length) { if( ____________________ ){++i; ++j; ) else( i=___________________; j=1; ) } if( j>T.length ) return ________________;/匹配成功 else return 0;/匹配失败}
已知串采用定长顺序存储结构如下,请将下列串的简单模式匹配算法补充完整。typedef struct{ char ch[MAXLEN+1];//存储串的一维数组,0号不用 int length;//串的长度}SString;int Index_BF(SString S,SString T,int pos){ i=pos; j=1; while(i<=S.length && j<=T.length) { if( ____________________ ){++i; ++j; } else{ i=___________________; j=1; } } if( j>T.length ) return ________________;//匹配成功 else return 0;//匹配失败}
题目解答
答案
S.ch==T.ch[j]# i-j+2# i-T.length
解析
步骤 1:初始化
在算法开始时,初始化两个指针 i 和 j,分别指向主串 S 和模式串 T 的起始位置。i 从 pos 开始,j 从 1 开始。
步骤 2:比较字符
在循环中,比较主串 S 的第 i 个字符和模式串 T 的第 j 个字符。如果相等,则同时增加 i 和 j 的值,继续比较下一个字符。
步骤 3:不匹配时的处理
如果在比较过程中发现字符不匹配,则需要回溯主串 S 的指针 i,使其回到上一次匹配的起始位置的下一个位置,同时将模式串 T 的指针 j 重置为 1,重新开始比较。
步骤 4:匹配成功
如果在循环结束时,模式串 T 的指针 j 超过了其长度,说明模式串 T 在主串 S 中找到了匹配的位置,返回匹配位置 i - T.length。
步骤 5:匹配失败
如果循环结束时,模式串 T 的指针 j 没有超过其长度,说明模式串 T 在主串 S 中没有找到匹配的位置,返回 0。
在算法开始时,初始化两个指针 i 和 j,分别指向主串 S 和模式串 T 的起始位置。i 从 pos 开始,j 从 1 开始。
步骤 2:比较字符
在循环中,比较主串 S 的第 i 个字符和模式串 T 的第 j 个字符。如果相等,则同时增加 i 和 j 的值,继续比较下一个字符。
步骤 3:不匹配时的处理
如果在比较过程中发现字符不匹配,则需要回溯主串 S 的指针 i,使其回到上一次匹配的起始位置的下一个位置,同时将模式串 T 的指针 j 重置为 1,重新开始比较。
步骤 4:匹配成功
如果在循环结束时,模式串 T 的指针 j 超过了其长度,说明模式串 T 在主串 S 中找到了匹配的位置,返回匹配位置 i - T.length。
步骤 5:匹配失败
如果循环结束时,模式串 T 的指针 j 没有超过其长度,说明模式串 T 在主串 S 中没有找到匹配的位置,返回 0。