免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3702 | 回复: 11
打印 上一主题 下一主题

一个有挑战的问题:整数与字符串运算 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-24 17:12 |只看该作者 |倒序浏览
5可用积分
int sum = 0, i = 0;
char input[5];

while (1) {
      sum = 0;
      scanf("%s", input);

       for (i = 0; input[i] != '\0'; i++)
       sum = sum*10 + input[i] - '0';   // <-------------- 这里为什么要减 '0' 呢?  直接 + input[i], 不会将char转成 int吗?
       printf("input=%d\n", sum);
}

return 0;
}

为什么要加 '0'呢?
还请大家指教

PS : 标题是为了吸引大家的,抱歉哈!

最佳答案

查看完整内容

抬抬杠~_~1. ASCII 非 ASC2II不是罗马数字2, ASCII = American Standard Code for Information Interchange2. '0'的ASCII 是 48没错但C语言不一定要求使用ASCII。所以上面的代码不一定输出48 。但:是对的。C语言要求 '0'到'9'中, 后一个减前一个的差为1 。ASCII满足这个要求, 但C没要求必须用ASCII。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2010-03-24 17:12 |只看该作者
字符'0'的ASC2码是  48
不相信的话可以
char c='0';
printf( "char '0'=%d\n", c );
后面的就不用解释为什么要减字符 '0'了吧
mgqw 发表于 2010-03-24 17:30


抬抬杠~_~

1. ASCII 非 ASC2
II不是罗马数字2, ASCII = American Standard Code for Information Interchange

2. '0'的ASCII 是 48没错

但C语言不一定要求使用ASCII。
所以上面的代码不一定输出48 。

但:

  1. input[i] - '0'
复制代码
是对的。

C语言要求 '0'到'9'中, 后一个减前一个的差为1 。
ASCII满足这个要求, 但C没要求必须用ASCII。

论坛徽章:
0
3 [报告]
发表于 2010-03-24 17:23 |只看该作者
回复 1# nine8
input是字符值'0'~'9',不是数值0~9

论坛徽章:
0
4 [报告]
发表于 2010-03-24 17:25 |只看该作者
还有,你的输入没有做限制,输入可能是任意字符

论坛徽章:
0
5 [报告]
发表于 2010-03-24 17:26 |只看该作者
例如'1'+2,你想要的结果肯定是3
但是算出来的结果确是0x30+2=50;
'1'-'0'的原因在于字符'0','1',...,'9',他们的ascii码值是相邻连续的分别为0x30,0x31......,0x39
相减就是对应的十进制值

论坛徽章:
0
6 [报告]
发表于 2010-03-24 17:30 |只看该作者
字符'0'的ASC2码是  48
不相信的话可以
char c='0';
printf( "char '0'=%d\n", c );
后面的就不用解释为什么要减字符 '0'了吧

论坛徽章:
0
7 [报告]
发表于 2010-03-24 17:31 |只看该作者
我已经对有深度,有挑战麻木了,这种面试题就去查书吧。

论坛徽章:
0
8 [报告]
发表于 2010-03-24 17:32 |只看该作者
字符跟数字是有区别的!

论坛徽章:
0
9 [报告]
发表于 2010-03-24 17:55 |只看该作者
抬抬杠~_~

1. ASCII 非 ASC2
II不是罗马数字2, ASCII = American Standard Code for Information  ...
OwnWaterloo 发表于 2010-03-24 17:49


偷懒少写点就碰到抬杠的了{:3_184:}
1.不是我不想,你先告诉我fcitx输入法怎么把罗马数字2给打出来。

2. C语言字符默认使用ASCII码,就没说这么多了{:3_201:}

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
10 [报告]
发表于 2010-03-24 18:02 |只看该作者
表激动, 不需要打罗马字啊, 就两个爱(i)就可以。

C编译器可能有, 但C语言字符集没有默认一说……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP