(C语言)指出下列程序运行后的结果。

来源:百度知道 编辑:UC知道 时间:2024/06/10 03:24:43
#include<stdio.h>
main(){
char a[100],C;
int i,j;
printf("请输入字符串a:\n");
gets(a);
printf("请输入任意一个字符:\n");
C=getchar();
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]!=C)
a[j++]=a[i];
a[j]='\0';
printf("%s\n",a);
}
程序结果为:
请输入字符串a:
qqwwee
请输入任意一个字符:
w
qqee
这道题的结果是qqee,就是把w去掉了
谁帮我分析分析qqee这个结果怎么来的,怎么实现的,谢谢了,我是新手

for(i=0,j=0;a[i]!='\0';i++)
if(a[i]!=C)
a[j++]=a[i];
其实你主要理解这个就可以了 首先i和j都是0 i是一直++的 这就是说要遍历a
if条件是你遍历的当前字符是不是w 是的话就继续下一个 不是的话 把他复制到a[j++]位置 这么说你或许不太明白 你若把a[j++]改为b[j++](b也是char[100])你要做的就是把a中的某个字符去掉 然后复制到b中 你的方法就是依次遍历a所有字符 当他不是你找的字符就复制到b[j]并且j+1准备接受下一个复制的字符
若a当前字符是你找的那个字符就略过 不复制到b中 继续找下一个
若还是不明白请HI我

这个程序中i是不断增加的,循环没进行一次都加一,而j不是这样,j加一的前提是遇到的字母不是你第二次输入的字符a[j]表示的是转换后的字符串中的变量,而a[i]表示转换前的,可知i>=j。
这样a[i]作为检测对象,而a[j]是被赋值的对象。
在上题中;情况如下
第1次循环 i=0,j=0,a[0]=a[0],i++,j++
第2次循环 i=1,j=1,a[1]=a[1],i++,j++
第3次循环 i=2,j=2, i++,(a[2]=c,if条件不成立)
第4次循环 i=3,j=2, i++,(a[3]=c,if条件不成立)
第5次循环 i=4,j=2,a[2]=a[4],i++,j++
第6次循环 i=5,j=3,a[3]=a[5],i++,j++
第7次循环 i=6 a[6]='\0'
循环结束
a[4]='\n'
字符串输出