#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”,它没有给我正确的答案。这是为什么?
答案 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