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”的任何代码。几乎可以肯定不是数字零。
考虑以下代码片段:
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”的任何代码。几乎可以肯定不是数字零。