━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
C言語による 数字・数字列 から 数値 への変換
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
「木構造と数式処理」の基本課題では数字を数値に変換し,発展課題では
数字列を数値に変換する.C言語によるこれらの変換方法を復習する.

●プログラム例

数字や数字列を数値に変換するC言語のプログラム例を以下に示す.

──────────────────────────────────────
#include <stdio.h>
#include <stdlib.h>   /* atoi() */

int main(void) {
  char digits[] = { '0', '1', '2', '?', '\0' };   /* 文字配列,文字列 */
  char *p;

  /* char 型データの値は文字コードを表す小さな整数 */

  puts("===== *p =====");

  for (p = digits; *p != '\0'; p++)
    printf("%d\n", *p);                           /* %d は値の10進表示 */

  /* 文字列は '\0' で終わる char 型データの並び */

  puts("========== p ==========");

  for (p = digits; *p != '\0'; p++)
    printf("%s\n", p);                            /* %s は文字列の表示 */

  /* 数字から数値への変換(数字のコードの連続性を利用) */

  puts("========== *p - '0' ==========");

  for (p = digits; *p != '\0'; p++)
    printf("'%c' -> %d\n", *p, *p - '0');         /* %c は文字の表示 */

  /* 数字列から数値への変換(atoi() を利用) */

  puts("========== atoi(p) ==========");

  for (p = digits; *p != '\0'; p++)
    printf("\"%s\" -> %d\n", p, atoi(p));

  return 0;
}
──────────────────────────────────────

●課題

このプログラムに関連する次の課題を実施し,C言語の 文字・文字列 についての
理解度を確かめるとよい.

(1a) 電算室の計算機上での文字 '0'〜'9' の文字コードを man ascii で調べよ.
(1b) 関数 printf() の変換の指定 %d, %c, %s の違いを man printf で確かめよ.
(1c) 関数 atoi() の機能(引き数と戻り値)を man atoi で調べよ.

(2a) プログラムを読み,結果を予想せよ.また,実行結果と予想とを比べよ.
(2b) プログラム中で *p - '0' でなく *p - 48 と書く場合の問題点を考えよ.

プログラム例のファイルと実行結果を以下に示す.

        プログラム例
        プログラムの実行例

関数 atoi() は,1文字でなく文字列を数値に変える関数であることに注意する.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
演習のホームページ

山田 俊行
https://www.cs.info.mie-u.ac.jp/~toshi/