这是个从一个字符串里删除另一个字符串的代码,但是我看不懂有大佬帮忙注释一下吗

#include <stdio.h>
#include <string.h>
void main()
{
    char a[100],b[100];
    scanf("%s",a);
    scanf("%s",b);
    int i=0,j=0;
    int n=0;
    int k=0;
    int M=strlen(a),N=strlen(b);
    for(i=0;i<M;i++)
    {
        if(a[i]==b[0])
        {
            n=0;
            for(j=0;j<N;j++)
            {
                if(a[i+j]==b[j]) n++;
            }
            if(n==j)
                for(j=0;j<N-1;j++)
                    i++;
                continue;
        }
        a[k++]=a[i];
    }
    a[k]='\0';
    printf("%s\n",a);
}

// 先遍历字符串a的每个字符 
 for(i=0;i<M;i++)
    {
        if(a[i]==b[0])
        {
            n=0;
            // 遍历字符串b的每个字符
            for(j=0;j<N;j++)
            {
                // 计算字符串b在字符串a有多小个相同字符,n是相同字符数量
                if(a[i+j]==b[j]) n++;
            }
            // 
            if(n==j)
                for(j=0;j<N-1;j++)
                    i++;
                continue;
        }
        // 修改字符串a
        a[k++]=a[i];
    }

 

从a串里面去掉b串的内容

从a串第一个字符开始和b串第一个字符比较,如果连续b串长度字符都完全一致,就抛弃这些,继续往下找;如果不匹配,就把当前第一个字母记录到a的当前位置(这个当前位置由k来指向)

#include <stdio.h>
#include <string.h>
void main()
{
    char a[100],b[100];
    scanf("%s",a);
    scanf("%s",b);
    int i=0,j=0;
    int n=0;
    int k=0;
    int M=strlen(a),N=strlen(b);
    for(i=0;i<M;i++) ---i指向本次搜索的第一个字母位置
    {
        if(a[i]==b[0])---如果b的第一个字母与本次搜索的第一个字母一致,则继续匹配
        {
            n=0;
            for(j=0;j<N;j++)---循环遍历b数组的所有字符
            {
                if(a[i+j]==b[j]) n++; ---判断相同字符的数量
            }
            if(n==j)  ---如果相同字符数量就是b数组个数
                for(j=0;j<N-1;j++)--移动下次检索的第一个字符在a数组中的索引
                    i++;
                continue;--继续搜索,没有字符要输出
        }
        a[k++]=a[i]; --如果不匹配,则将本次搜索的第一个字母存储到a的当前覆盖字母位置,这个位置由k控制,每覆盖一个字母加1
    }
    a[k]='\0';---在所有覆盖字母后加结束符,即使a数组后面其实还有字母,但printf时会被截掉
    printf("%s\n",a);
}

你可以打断点,F10单步执行

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html