这C语言的题是
【问题描述】从键盘输入一个字符串S和一个字符C,编程实现将字符串S中所有的C字符去除
【输入形式】一个字符串,一个字符
【输出形式】参见样例输出
【样例输入】a
Shanghai,I am coming!
【样例输出】Shnghi,I m coming!
希望懂C语言的朋友帮我看一下下面这个编程,//前面的是我不懂的,希望有人能给我解释一下,谢谢!
#include <stdio.h>
#include <string.h>
main()
{
char a[100];
char b[100];
int i,j,k;
int c=1;
gets(b);
gets(a);
for(i=0;i<strlen(a);i++)
{
c=1;
k=strlen(b);
for(j=0;j<k;j++)
{
if(a[i+j]!=b[j])c=0; //为什么这样写?
}
if(c==1)
{
for(j=0;j<=strlen(a);j++)
{
a[i+j]=a[i+j+k]; //也不懂为什么这样写
}
}
}
printf("%s\n",a);
}
请看我给你附加的图,假设a,b 两个字符串,a="1234567",b="45",如果要在a中除去b的话,首先要找到b在a中的位置,我标注A的地方就是找到b在a中的位置的
找法:
先循环a,看b在a的那个位置(或那些位置,一个个剔除),当第一次循环a时,i=0,获取b的长度为2,那么先将a 0 和b 0 进行不相等比较,如果不相等,则让c等于0,然后将a 1 和b1 位置相比(其实第一个位置比较失败了就不用在进行下去了),然后本次比较就完成了,开始执行B部分剔除,因为没有找到,c=0,所以不执行B部分;进行第二次大循环了,i=2,将a 1 和 b 0 相比,比较方式同第一次;
当我们进行到第四次的时候,i=3,a 3 和 b 0相等,就不执行c=0了,然后j++,a 4 和 b1 相等了,也不执行c = 0,那么本次执行结束后c=1(因为b长度为2,执行两次循环),便要从a中去除b,因为外面的大循环i=3,那么在B部分a[i + J]就是a[3](也就是4),a[i +j+ k]就是a[5],将a[5]付给a[3],然后再次循环B部分,a[4]=a[6],就完成了在‘1234567’中去除‘45’了
这个程序是有些问题的,要注意了, B部分执行可能会报数组越界的,就和我上面一样如果a为“123456”,那么在执行a[4]=a[6]时,便越界了
不要怕循环,慢慢看,最好看时在旁边几下每次下标值和数组,便于分析的,
祝你成功
非常非常感谢!
追答能看懂不 , 代码清楚易懂就好
参考资料:刚写的