このサンプルコードは、C言語での配列の使用に関するものです。
#include <stdio.h>
main () {
int c, i;
int ndigit[10];
for (i = 0; i < 10; ++i)
ndigit[i]=0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c - '0'];
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
}
私はこれまで配列を見たことがありませんでしたが、私はそれを手に入れたと思います。それでも、なぜ数字を挿入'..'
する必要があるのか、またはの割り当てをi
として表現する必要があるのかはわかりませんc-'0'
。
これは私の疑問を明確にするはずの本の一節です:
この特定のプログラムは、数字の文字表現のプロパティに依存しています。たとえば、テキストは
if (c >= '0' && c <= '9')
、の文字c
が数字であるかどうかを決定します。の場合、その桁の場合の数値はc - '0'
。です。
これらの値が文字の場合、算術式でどのように使用できるのかわかりませんが、数値にマッピングされているためですか?
そして、彼らはのように数字として書かれている場合は、プログラム全体だけでは動作しない理由if (c >= 0 && c <= 9)
もそれがあれば動作しますc
(私の理解にどんな数」だけである、そのように書かれていないc
マイナス0)。
TL; DR:「char」は1バイト長の整数です。
これらの値が文字の場合、算術式でどのように使用できるのかわかりませんが、数値にマッピングされているためですか?
Cでは、charは「基本文字セットを含めることができるマシンのアドレス可能な最小単位です。整数型です」。[1]。通常、charは「1バイト長の整数」と同等であるため、0から(2 ^ 8)-1、または[0,255]までの値を保持できます。
そうは言っても、あなたが書くとき
char c = '9';
「cは1バイト長の整数であり、その値は文字9の文字セット表現です」と言っています。最も一般的な文字セットであるASCIIテーブル[2]を見ると、文字9の整数値が57であることがわかります。したがって、上記の式は次のようになります。
char c = 57;
数字の文字セット値を数字自体に変換するには(たとえば、「9」から9、または57から9)、数字が常に順次かつ増加して格納され、値を減算するだけの文字セットのプロパティに依存できます。 '0'の、ASCIIでは48なので、次のようになります。
char c;
c = '9' - '0'; /* = 9 In any character set */
c = 57 - 48; /* = 9 */
c = '9' - 48; /* = 9 In ASCII */
c = 57 - '0'; /* = 9 In ASCII */
ASCIIが最も一般的な文字セットですが、これは実際にはマシンに依存することに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加