cc++判断子串在主串中的位置(朴素模式匹配算法)-----通俗易懂(口诀记忆)

    技术2022-07-10  135

    1,说明 如果字符串b是字符串a的子串,则返回b第一次出现在a中的位置。 否则 不是子串 注意 空串是任何串的子串,且出现的位置为0.

    2 基本思想 假设a是主串,简单的方式是:想用一个外层循环遍历字符串a的每一个字符,在遍历过程中,在使用一个内层循环,以当前主串中a的字符为起始,去和子串b进行一一对比,如果对应对比成功 就找了

    3代码

    #include <iostream> #include <stdio.h> #include <cstring> using namespace std; int main() { char a[] = "hello world"; char b[] = "wor"; for (int i = 0; i < a[i]; i++) {// 外层循环 主串长 int j = 0; for(j = 0; j < b[i]; j++){//内层循环 子串长 if (a[i+j] !=b[j]){ //主串局部配子串 break; } } if (b[j] == 0) cout << i << endl; } return 0; }

    可以用个口诀记忆,方便代码记忆 外层循环 主串长 内层循环 子串长 主串局部配子串

    另外,数据结构书上有朴素模式匹配算法的一种写法,另外,kmp算法是其一种优化算法,只需要一次遍历就可以了,但是,如果第一次理解kmp算法还是有一定难度的,建议,多画图分析具体的过程。

    Processed: 0.012, SQL: 9