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

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

本文关键字:之间 区别 C++ int      更新时间:2023-10-16

考虑以下代码片段:

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'也可以写成97 - 48 -> '0'

引擎盖下的字符是整数,所以你可以用算术运算符来遍历它们。(勾选此项(。

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

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

因为例如,如果您的字符串出于某种原因是"1",而您执行duplicates[c-'0']++;,则数组索引将是负数,因此是未定义的行为(假设您在增量之前不进行任何检查,例如检查是否在特定绑定内(

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

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

这将减去平台用来表示字符"0"的任何代码。几乎可以肯定,它不是零。