【C/C++】C言語文法の復習(3)文字
C言語の文字の取り扱いは、他の言語で文字列としての型に慣れていると、きちんと理解できていなかったように思えた。以下の問題のお陰で、自分の理解不足を痛感したので、備忘録として残しておく。
【問題】
文字列として定義されている「123」を、整数の値に変換して出力するプログラムを作りなさい。
【解答】
#include <stdio.h> #include <string.h> void main() { char numString[] = "123"; int i, num = 0; for (i = 0; i < strlen(numString); i++) { num = num * 10 + numString[i] - '0'; } printf("%d\n", num); }
文字・文字列
char
型変数は、1文字を記憶できる- 1文字は、文字コード(整数)を記憶している
- 整数を文字としてデコードして、文字を表示する
つまり、char型は普通の整数型と全く同じである。
そして、C言語には、文字列という変数型がないので、文字の配列を用いる。
ASCIIコード
ASCIIとは、アルファベットや数字、記号などを収録した文字コードの一つ。最も基本的な文字コードとして世界的に普及しており、他の多くの文字コードがASCIIの拡張になるよう実装されている。文字を7ビットの値(0~127)で表し、128文字が収録されている。以下が、数字の文字である。
文字 | 10進数 | 16進数 |
---|---|---|
0 | 48 | 0x30 |
1 | 49 | 0x31 |
2 | 50 | 0x32 |
3 | 51 | 0x33 |
4 | 52 | 0x34 |
5 | 53 | 0x35 |
6 | 54 | 0x36 |
7 | 55 | 0x37 |
8 | 56 | 0x38 |
9 | 57 | 0x39 |
文字を数値に変換する
char
型の文字には、文字コードである整数が保存されているので、文字に対して計算を行うことができる。
「文字の数字」を「数値」への変換は、 '0' の番号(ASCII:48)を引き算することで実現することができる。
(数値) = (文字の数字) - '0'
ゆえに、上記の解答のようなコードを実装することができる。
まとめ
コンピュータでどのように文字を取り扱っているかについて、改めて知識を整理することができた。