#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