【问题标题】:Difference between int(c) and c-'0'. C++int(c) 和 c-'0' 之间的区别。 C++
【发布时间】:2020-02-26 00:19:59
【问题描述】:

考虑以下代码片段:

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']++;

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

【问题讨论】:

  • 也要考虑负字符值
  • 97 是字符'a' 的数值。 48 是字符'0' 的数值。 49是两者之间的差异。不要使用c - '0',因为您的字符串可能包含小于'0' 的字符。见asciitable.com
  • @John "Don't use c - '0'" - 完全可以使用,只要确保c 是数字优先,例如@ 987654322@

标签: c++ char ascii


【解决方案1】:

这应该回答你的问题:

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

如果你运行它,输出是97 48 49,因为97 -&gt; 'a'48 -&gt; '0'等等49 -&gt; '0',也可以写成97 - 48 -&gt; '0'

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2023-03-15
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 2014-06-12
      • 2018-05-04
      • 2023-03-17
      • 2022-05-04
      相关资源
      最近更新 更多