C语言 请帮我分析 子函数里面的语句的意思

/* Note:Your choice is C IDE */
#include "stdio.h"
char fun(char x[],char y)
{
int i,j;
for(i=0,j=0;x[i]!='\0';i++)
{
if(x[i]!=y)
x[j++]=x[i];
}
x[j]='\0';
}
main()
{
char a[20],b;
gets(a);
scanf("%c",&b);
fun(a,b);
printf("%s\n",a);
}
x[j++]=x[i];
这步我不理解 为什么 I 的值赐予J
为什么 for(i=0,j=0;x[i]!='\0';i++,J++)
if(x[i]!=y)
x[j]=x[i];
就不行了```请帮我深入分析 表面求解意思我懂

i和j不是同时移动的,只有当不等于y的时候才是,如果改为同时移动就没意义了。
例如 accd c
1=0,j=0
1=1,j=1
1=2,j=1
1=3,j=2
char fun(char x[],char y)//形参x[]代表需要进行操作的字符串数组,
{ //y代表需要删除的字符
int i,j; //中间变量,i针对x[]计数,j针对新x[]计数
for(i=0,j=0;x[i]!='\0';i++)//循环条件字符串数组未完
{
if(x[i]!=y)//如果x中字符x[i]不等于y
x[j++]=x[i];//继续比较,将其放入新x[]中。
//这里因为是删除,所以j永远<=i,可以在原字符串数组的基础上进行覆盖从而达到删除目的,等于y的被直接跳过
}
x[j]='\0';//给新字符串数组末尾加'\0'
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-14
char fun(char x[],char y)————————用X[]、y分别接收主函数的a和b的值!
{
int i,j;
for(i=0,j=0;x[i]!='\0';i++)————循环读取字符数组中的字符,直到遇到"\0"循环结束,
{
if(x[i]!=y)—————判断字符数组X中的元素是否不等于y;
x[j++]=x[i];—————上一条语句中的条件如果成立,则将数组X中的元素赋给x[j++];
}
x[j]='\0'; ————循环执行结束,给新数组x[j]加结束符!这一点挺容易漏掉!多注意!
}

如果你将x[j++]=x[i];改为x[j]=x[i];X[j]就没什么意义了,相当于一个数,最后也只能得到最后一次循环的值。因为for(i=0,j=0;x[i]!='\0';i++)里面没有j++;这个条件,所以如果你改为x[j]=x[i];j的值只是为0;没有变化了! 而此程序的的作用应该是将数组X中与主函数中b的值相等的元素去掉组成一个新数组。
第2个回答  2012-04-14
子函数的作用是:删除x字符数组中与y字符相同的元素。
整个函数实现的是输入一个字符数组a,并输入一个字符b,将字符b与数组a进行比较,相同的就跳过,不相同的就保留,最终实现将字符数组中与输入字符相同的元素删除。
补充回答:
x[j++]=x[i];
注意i和j都是指数组的下标,它对应的是一个存储空间,在x[i]!=y的情况下,x[j]==x[i]的,一旦遇到x[i]==y的情况后,下标i就大于下标j了,而我们需要的是使他们相等,所以将x[j++]=x[i],这里其实包括两句:x[j]=x[i];j++;。
你的想法是完全对的,注意大小写就可以了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网