4
 #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;
}

sum += c[i] - '0'; を受け入れるすべてを理解しています。「-'0'」を削除しましたが、正しい答えが得られませんでした。どうしてこれなの?

4

4 に答える 4

10

これは、文字をその文字コード (たとえば ASCII では 48) から整数に変換します。したがって、文字'0'を整数として値 0 に変換します。Pete Becker が C と C++ の両方の言語定義のコメントで指摘したように、数字はすべて連続している必要があります。

于 2013-03-20T09:36:00.417 に答える
1

0 の ascii 値は 48、1 は 49 などです。あなたのプログラムc[80]には文字の配列があります。そのため、キーボードから 1 を入力すると、コンパイラは算術演算でそれを 49 (ASCII 値) として扱います。そのため、ASCII 値の 0 (つまり 48) を減算して、同等の整数を取得する必要があります。これは、文字から '0' を減算するか、48 を直接減算することによって実現できます。たとえば、 で置き換えるsum += c[i]-'0';sum += c[i]-48;、コードも機能します。しかし、これは良い習慣ではありません。お役に立てれば。

于 2013-03-20T09:47:49.350 に答える
1

文字を整数値に変換します。

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
于 2013-03-20T09:41:13.240 に答える
1

'0' は ASCII 値 0 を返します。したがって、ASCII 値ではなく数値を使用するには、ASCII 値 0 でオフセットする必要があります。 '1' - '0' ::= 49 - 48 ::= 1 ( 49 と 48 は、それぞれ 1 と 0 の ASCII 値です)。

于 2013-03-20T09:38:34.150 に答える