gpt4 book ai didi

c++ - 我无法理解字符串如何转换为整数的概念

转载 作者:太空狗 更新时间:2023-10-29 23:49:00 24 4
gpt4 key购买 nike

我提到了一个时间转换程序,但无法理解部分代码。这是完整的程序。

#include<iostream>
#include<cstdio>

using namespace std;

int main() {
string s;
cin >> s;

int n = s.length();
int hh, mm, ss;
hh = (s[0] - '0') * 10 + (s[1] - '0');
mm = (s[3] - '0') * 10 + (s[4] - '0');
ss = (s[6] - '0') * 10 + (s[7] - '0');

if (hh < 12 && s[8] == 'P') hh += 12;
if (hh == 12 && s[8] == 'A') hh = 0;

printf("%02d:%02d:%02d\n", hh, mm, ss);

return 0;
}

我无法理解的部分代码是

    hh = (s[0] - '0') * 10 + (s[1] - '0');
mm = (s[3] - '0') * 10 + (s[4] - '0');
ss = (s[6] - '0') * 10 + (s[7] - '0');

提前致谢。

最佳答案

如果你看到例如this ASCII table (ASCII 是最常见的字符编码方案)您可以看到字符 '2' 具有十进制值 50,并且字符'0' 的十进制值为 48

考虑到字符实际上只是一个小整数,我们可以对它们使用普通算术。这意味着如果你这样做'2' - '0' 这与执行 50 - 48 相同,结果是十进制值 2

所以要得到一个字符数字的十进制值,只需减去'0'即可。

10 的乘法是因为我们处理的是十进制 系统,其中21 等数字与2 * 10 + 1


应该注意的是,C++ 规范明确指出所有数字都必须在连续范围内进行编码,因此无论使用哪种编码都将始终有效。

您可能会看到这个“技巧”也被用于获取字母的十进制值,但请注意,C++ 规范对此没有任何说明。事实上,有些编码的字母范围 是连续的,这将不起作用。它仅指定用于处理数字。

关于c++ - 我无法理解字符串如何转换为整数的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48557314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com