/* 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'
}
ä¾å¦ 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的值相等的元素去掉组成一个新数组。
{
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++;。
你的想法是完全对的,注意大小写就可以了。
整个函数实现的是输入一个字符数组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++;。
你的想法是完全对的,注意大小写就可以了。