You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中ch - '0'含义解析:算术表达式解析栈操作疑问

关于表达式解析中s.push(ch - '0')的详细解答

嘿,这个细节确实是算术表达式解析里的关键操作,我来给你一步步讲明白:

1. s.push(ch - '0')的核心含义

当ch是'0'到'9'之间的字符时,这句代码的作用是把字符形式的数字转换成对应的整数数值,然后将这个整数压入栈s中。

比如:

  • 如果ch是'3',那么'3' - '0'的结果就是整数3
  • 如果ch是'9',结果就是整数9

2. 和ASCII码的直接关联

这完全和ASCII码有关!在C/C++中,字符是以ASCII码的形式存储的:

  • 字符'0'的ASCII值是48
  • 字符'1'的ASCII值是49
  • ...
  • 字符'9'的ASCII值是57

所有数字字符的ASCII值是连续递增的,所以用当前数字字符的ASCII值减去'0'的ASCII值,就能得到该字符对应的整数数值——这是处理数字字符的经典技巧,简单高效。

3. 删除该语句后结果变化的原因

如果删掉这句代码,你压入栈的就不是实际的整数数字,而是数字字符的ASCII码值。比如:

  • 原本要压入整数3,现在压入的是'3'的ASCII值51
  • 后续运算时,栈里的“数字”都是51、52这类ASCII值,而不是真实的3、4,计算出来的结果自然会完全偏离预期。

举个小例子:假设表达式是1+2,原本应该计算1+2=3,但如果没做转换,栈里存的是'1'(ASCII 49)和'2'(ASCII 50),运算后得到49+50=99,这显然不是你想要的结果。

补充说明

你的栈s是用来存储计算所需的整数和运算符的,只有把字符数字转换成整数,后续的加减乘除逻辑才能正确执行——这一步是字符数字到数值的必要转换,绝对不能省略。

内容的提问来源于stack exchange,提问作者shehab ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:07:49