数字提取
fun函数功能:将字符串中的数字字符挑出来,并组合成一个整数返回(题目保证组合在整型范围内)。如字符串1aei7ei**$23&=,则提取的整数为1723。
这道题答案比较明朗,但最后那行代码也值得推敲几秒钟。
x= x*10+s[i]-'0'这行代码中为什么要减去'0'?
文心一言毫不犹豫地给出了答案:
在 C 语言中,字符常量(例如 '0','1','2' 等)实际上是整数类型。当字符常量从键盘输入或从其他字符数据类型转换时,它们会被转换为相应的 ASCII 码值。例如,字符 '0' 的 ASCII 码值是 48,'1' 是 49,等等。
在你的代码中,s[i] - '0'
是为了将字符 '0' 到 '9' 转换回实际的数字值。因为字符 '0' 的 ASCII 码值是 48,'1' 是 49,等等,所以 s[i] - '0'
会得到相应的数字值。这是 C 语言处理字符和数字的一种常用技巧。
例如,假设 s[i]
是字符 '3'。那么 s[i] - '0'
的结果就是 '3',因为 '3' 的 ASCII 码值是 51,减去 '0' 的 ASCII 码值 48 就得到了 3。