7839

雑草魂エンジニアブログ

【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'

ゆえに、上記の解答のようなコードを実装することができる。

まとめ

コンピュータでどのように文字を取り扱っているかについて、改めて知識を整理することができた。