谁能帮我解释一下这道二级C语言题目?

题目是:函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为"... 题目是:
函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。
例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符C的ASCII码值为奇数,在数组中的下标为偶数, 因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其它依此类推。
最后t所指的数组中的内容应是"BDF12345"。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
{
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问
题。
参考答案:
void fun(char *s, char t[])
{
int i, j = 0 ;
for(i = 0 ; i < strlen(s) ; i++)
if(!((i % 2) ==0 && (s[i] % 2))) t[j++] = s[i] ;
t[j] = 0 ;
}
在这里的答案中1:(s[i] % 2)是什么意思,这样的判断有意义吗?
2:最后的t[j] = 0,这是表示结束吗?不是t[j] = ‘\0’吗?
展开
 我来答
w_zhangwei_1
2012-08-13 · TA获得超过181个赞
知道答主
回答量:214
采纳率:0%
帮助的人:152万
展开全部
首先,你的参考答案没有任何问题的!

(s[i] % 2)即表示s[i]和2取模不等于0,肯定是有意义的

t[j]=0等价于t[j]='\0'
字符 '\0'的ASCII码就等于 0,相当于 char a=49; a== '1',是一样的 !字符只是一种表现形式,ASCII码才是系统存储的值
追问
那请问最后一步直接写成t[j] = ‘\0’可以吗?

如果t[j]确实是一个零,那应该怎么输入?
追答
可以,理论上运算速度低于t[j]=0!

呵呵,这个问得很好啊!t[j]=0,对于系统函数strlen来说是结束符,但是你在赋值的时候依旧可以向j下标之后数组元素赋值,同样只要不超出数组的边界,也是可以访问到其元素的值的!
char test[5];
test[0]='1';
test[1]='5';
test[2]=0;
test[3]='5';
test[4]='6';

strlen(test) == 2;
test[3]=='5';
test[4]=='6';
在普通的7位ASCII码文本中不太可能出现这种情况,但是在加密、校验、二进制流传输的时候就会出现这种情况。一般的处理办法就是将整个字符串的实际长度也传入处理函数,而不会使用strlen函数作为字符串长度
如:

int get_crc_16(char* src,int slen)
{
int i=0;
while(i<slen)
{
...

}

}
leiyangbdwk
2012-08-13 · TA获得超过3296个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4445万
展开全部
1.下标为偶数同时ASCII值为奇数,分别对应(i % 2) ==0和s[i] % 2后面这个省略了==1.
2.t[j]是char型,赋值为0的时候自动转换成‘\0’。
追问
那请问最后一步直接写成t[j] = ‘\0’可以吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qtbui0123
2012-08-13 · 超过20用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:71.2万
展开全部
1.(s[i] % 2) 这个 省略的不是 ==1而是 !=0(不等于0)
2.最后的t[j] = 0 也不是转换成了t[j] = ‘\0’.

'\x' 表示的是八进制的值, 八进制的0 十进制的0 十六进制的0 在内存中表示都是0

所以你就算写 t[j] = 0x0 他也是对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longmaibs
2012-08-13 · TA获得超过140个赞
知道答主
回答量:263
采纳率:100%
帮助的人:34.5万
展开全部
第一个:s[i]地址中的数据除2
第二个:t[j]赋值0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
503937334
2012-08-13
知道答主
回答量:11
采纳率:0%
帮助的人:7万
展开全部
不好意思,你的参考答案错了 t[j] = ‘\0’;表示结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式