函数fun的功能是:将s所指字符串中除了下标为偶数,同时ASCII指也为偶数的字符外,其余的全部都删除:

串中剩余字符所形成的一个新串放在t所指的数组中。
void fun(char *s,char t[ ])
{
int i,j=0;
for(i=0;i<strlen(s);i+=2)
if(s[i]%2==0)t[j++]=s[i];
t[j]=0;
}

void fun(char *s, char t[])
{int j=0;
while(*s)
{if(*s%2==0)
t[j++]=*s;s++;s++;}
t[j]=0;
}为什么执行结果不同

第二个函数少了一句,在while循环之前加上:p=t;。
也就是把数组t的数组名或者说首地址附给指针p,否则下边的循环开始的地方不是你想要的 t[0]。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-17
第二种算法有问题:
void fun(char *s, char t[])
{int j=0;
while(*s) /*加了两次的s可能会出数组的界(只要字符数组的元素个数为奇数就会出界),出了界就不一定是0,但不是我们想要的元素,比如"123"*/
{if(*s%2==0)
t[j++]=*s;s++;s++;} //可以看出s加了两次
t[j]=0;
}本回答被网友采纳
相似回答