有人可以解释“ - '0'”

时间:2013-03-20 09:34:17

标签: c++ arrays string

 #include <iostream> // cin, cout
using namespace std;
int main(void)
{
char c[80];
int i, sum=0;
cin.getline(c,80);
for(i=0; c[i]; i++) // c[i] != '\0'
if('0'<=c[i] && c[i]<='9') sum += c[i]-'0';
cout<< "Sum of digits = " << sum << endl;
getchar();
getchar();
return 0;
}

我理解一切都接受了总和+ = c [i] - '0';我删除了“-'0”,它没有给我正确的答案。这是为什么?

4 个答案:

答案 0 :(得分:10)

这将字符从其字符代码(例如ASCII中的48)转换为其等效整数。因此,它将字符'0'转换为值0作为整数。正如Pete Becker在C和C ++语言定义的评论中指出的那样,要求所有数字字符都是连续的。

答案 1 :(得分:1)

'0'返回ASCII值0.因此,要使用数字而不是ASCII值,需要将ASCII值偏移为0。 '1' - '0':: = 49 - 48 :: = 1(49和48分别是1和0的ASCII值)。

答案 2 :(得分:1)

0的ascii值为48,其中49的ascii值为依此类推。现在你的程序中c[80]是一个字符数组。因此,如果从键盘输入1,编译器会将其视为算术运算的49(ascii值)。这就是为什么我们需要减去ascii值0(即48)来得到整数等价。这可以通过从字符中减去'0'或直接减去48来实现。 例如如果您将sum += c[i]-'0';替换为sum += c[i]-48;,则代码也可以使用。但这不是一个好习惯。希望这会有所帮助。

答案 3 :(得分:0)

它将字符转换为整数值:

character | ASCII code  | expression | equivalent | result
  '0'     |      48     | '0' - '0'  |  48 - 48   |   0
  '1'     |      49     | '1' - '0'  |  49 - 48   |   1
  '2'     |      50     | '2' - '0'  |  50 - 48   |   2
  '3'     |      51     | '3' - '0'  |  51 - 48   |   3
  '4'     |      52     | '4' - '0'  |  52 - 48   |   4
  '5'     |      53     | '5' - '0'  |  53 - 48   |   5
  '6'     |      54     | '6' - '0'  |  54 - 48   |   6
  '7'     |      55     | '7' - '0'  |  55 - 48   |   7
  '8'     |      56     | '8' - '0'  |  56 - 48   |   8
  '9'     |      57     | '9' - '0'  |  57 - 48   |   9