C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で単一の文字をint型に変換する方法

C++では、文字(char)を整数値(int)に変換する場面がよくあります。たとえば、ユーザー入力から数字の文字を取り出して数値として計算したい場合などです。本記事では、ASCIIコードを利用した基本的な変換方法を、サンプルコードとともにわかりやすく解説します。

変換の基本原理

コンピュータ上で文字は内部的にASCIIコードと呼ばれる数値として扱われています。数字の「0」〜「9」は、ASCIIコードで48〜57に対応しています。そのため、文字から48(つまり文字'0')を引くことで、対応する整数値を求めることができます。

サンプルコード

以下は、文字をint型に変換する具体例です。

#include <iostream>
using namespace std;

int main() {
    char c = '8';
    int i = c - 48;
    cout << i;

    i = c - '0';
    cout << "\t" << i;

    return 0;
}

実行結果

8       8

コードの解説

このプログラムでは、まず文字変数cに「8」という文字を初期化しています。その後、以下のようにして文字を整数値へ変換しています。

char c = '8';
int i = c - 48;
cout << i;

i = c - '0';
cout << "\t" << i;

処理の流れを順番に見ていきましょう。

  • c - 48: 文字'8'のASCIIコードは56なので、56 − 48 = 8 となり、整数値8が得られます。
  • c - '0': 文字'0'のASCIIコードも48であるため、結果は同じく8になります。こちらの方が意図が明確で可読性が高いので、実務では推奨される書き方です。

より安全な代替手段

ASCIIコードの引き算はシンプルですが、変換対象が必ず数字の文字である保証がない場合は注意が必要です。C++11以降では、標準ライブラリの関数を使ってより安全に変換することもできます。

  • std::stoi: 文字列全体を整数に変換する場合に便利です。
  • std::isdigit: 変換前に文字が数字かどうかを判定できます。
#include <cctype>
#include <iostream>
using namespace std;

int main() {
    char c = '8';
    if (isdigit(static_cast<unsigned char>(c))) {
        int i = c - '0';
        cout << i; // 出力: 8
    }
    return 0;
}

このように、事前にisdigitで判定を行うことで、数字以外の文字が渡された場合の予期しない動作を防ぐことができます。

まとめ

C++で単一の文字をint型に変換する最も基本的な方法は、文字から'0'(ASCIIコード48)を引くことです。シンプルで高速な手法ですが、入力値が数字であることを確認してから変換すると、より堅牢なプログラムになります。

  1. 【C#入門】2次元配列を1次元配列に変換する方法をわかりやすく解説

    C#で2次元配列を1次元配列に変換するには?プログラミングでは、2次元配列のデータを1次元配列として扱いたい場面がよくあります。C#では、ネストしたforループとカウンタ変数を組み合わせることで、2次元配列の全要素を1次元配列へ簡単にコピーできます。本記事では、その具体的な手順とサンプルコードを解説します。手順1:2次元配列と1次元配列を宣言するまず、変換元となる2次元配列と、変換先となる1次元配列を用意します。int[] a = new int[2, 2] {{1,2}, {3,4}}; int[] b = new int[4];ここでのポイントは、1次元配列のサイズを「行数 × 列数」で指

  2. Pythonで16進文字列をintに変換する方法をわかりやすく解説

    Pythonで16進文字列をintに変換する基本 Pythonでは、組み込み関数 int() を使うことで、16進数の文字列を簡単に整数(int型)へ変換できます。16進文字列には一般的に「0x」というプレフィックスが付いており、その有無によって指定方法が少し異なります。 「0x」プレフィックスがある場合 文字列に「0x」プレフィックスが付いている場合は、int(文字列, 0) のように第2引数に 0 を指定します。こうすることで、Pythonがプレフィックスをもとに基数を自動的に判別してくれます。 >>> int(0xfe43, 0) 65091 「0x」プレフィックス