int(c) 和 c-'0' 之间的区别。 C++

Difference between int(c) and c-'0'. C++

考虑以下代码片段:

char c = 'a';
std::cout << int(c) << " " << c - '0' << std::endl;

这里我的输出是 97 49.

谁能告诉我它们之间的区别是什么?
例如,如果我试图查找字符串中重复字符的数量:

int duplicates[256];
//.. run over string
1. duplicates[c]++;
2. duplicates[c-'0']++;

那么我应该选择哪一个,它们之间有什么区别?
提前致谢。

这应该可以回答您的问题:

char c = 'a';
std::cout << int(c)  << " "<< int('0') << " " << c - '0' << std::endl;

如果你运行它的输出是97 48 49,因为97 -> 'a'48 -> '0'等等49 -> '0',也可以写成[=16] =].

引擎盖下的字符是整数,因此您可以使用算术运算符遍历它们。 (检查 this)。

这意味着如果你有一个 string 或一个 char * 并且你想计算每个字符的所有出现次数,你应该使用

int duplicates[256];
duplicates[c]++;

因为例如如果你的字符串由于某种原因是 "" 而你做 duplicates[c-'0']++; 数组索引将是一个负数,所以未定义的行为(假设你没有在增量之前进行任何检查,例如检查是否在特定范围内)

数字零和字符符号“0”是完全不同的两个东西。他们唯一的共同点是符号“0”有时被用作表示数字零的方式。

std::cout << int(c) << " " << c - '0' << std::endl;

这会减去您的平台用来表示字符“0”的任何代码。几乎可以肯定不是数字零。