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

C言語・C++でchar型をint型に変換する方法まとめ(sscanf・atoi・stoi・型キャスト)

C言語やC++のプログラミングでは、char型のデータをint型(整数)に変換したい場面がよくあります。例えば、文字列として受け取った数字を計算に使いたい場合や、文字の文字コード(ASCIIコード)を取得したい場合などです。

本記事では、C言語C++それぞれの言語でchar型をint型に変換する方法を、サンプルコードと実行結果とともにわかりやすく解説します。

C言語でchar型をint型に変換する3つの方法

C言語では、主に次の3つの方法で変換を行います。

  • sscanf():書式指定子「%d」を使って、数字の文字列から整数値を読み取る
  • atoi():数字の文字列をint型の整数に一発で変換する
  • 型キャスト:単一の文字をASCIIコード(文字コード)の整数値として取得する

なお、sscanf()とatoi()は「12345」のような数字の並び(文字列)を整数に変換する関数である一方、型キャストは1文字をその文字コード値へ変換するという点で役割が異なります。用途に応じて使い分けましょう。

C言語のサンプルコード

#include <stdio.h>
#include <stdlib.h>
int main() {
    const char *str = "12345";
    char c = 's';
    int x, y, z;

    sscanf(str, "%d", &x); // sscanf()を使用
    printf("\nxの値 : %d", x);

    y = atoi(str); // atoi()を使用
    printf("\nyの値 : %d", y);

    z = (int)(c); // 型キャストを使用
    printf("\nzの値 : %d", z);

    return 0;
}

実行結果

xの値 : 12345
yの値 : 12345
zの値 : 115

このように、sscanf()とatoi()は文字列「12345」をそのまま整数の12345に変換しています。一方、型キャストで得られる115は、文字's'に割り当てられたASCIIコードです。

C++でchar型をint型に変換する2つの方法

C++では、次の2つの方法が利用できます。

  • stoi():文字列をint型の整数に変換する
  • 型キャスト:単一の文字をASCIIコードの整数値として取得する

C++のサンプルコード

#include <iostream>
#include <string>
using namespace std;
int main() {
    char s1[] = "45";
    char c = 's';

    int x = stoi(s1);
    cout << "xの値 : " << x;

    int y = (int)(c);
    cout << "\nyの値 : " << y;

    return 0;
}

実行結果

xの値 : 45
yの値 : 115

stoi()は文字列「45」を整数の45に変換し、型キャストによって文字's'のASCIIコードである115が取得できています。

まとめ

  • C言語ではsscanf()atoi()を使って、数字の文字列を整数に変換できる
  • C++ではstoi()を使って、文字列を整数に変換できる
  • 単一の文字を数値化したい場合は、どちらの言語でも型キャストによりASCIIコードを取得できる

用途に合わせて適切な方法を選択することで、文字と数値の変換を安全かつ効率的に行えます。

  1. C++で解く「壁と門」問題:BFSによる最短距離計算の徹底解説

    問題概要m × n の2次元グリッドを考えます。このグリッドは、以下の3種類の値で初期化されています。-1:壁または障害物0:ゲート(門)INF:空き部屋(無限大を表す)ここでは、INF として 2^31 − 1 = 2147483647 を使用します。ゲートまでの距離は必ず 2147483647 未満になると仮定できるためです。求めたいのは、各空き部屋に対して、最も近いゲートまでの距離です。もしゲートへ到達できない部屋があれば、その部屋は INF のままにします。入力例INF-10INFINFINFINF-1INF-1INF-10-1INFINF出力例3-101221-11-12-10-13

  2. C++で円と長方形の重なりを判定するアルゴリズム

    問題の概要円を (radius, xc, yc) という形式で表します。ここで (xc, yc) は円の中心座標です。同様に、軸に平行な長方形(軸平行境界ボックス)を (x1, y1, x2, y2) という形式で表し、(x1, y1) が左下隅の座標、(x2, y2) が右上隅の座標とします。このとき、円と長方形が互いに重なっているかどうかを判定する必要があります。たとえば、次のような入力が与えられた場合を考えてみましょう。この場合、出力は true(重なりあり)となります。解決のアプローチこの問題を解く鍵は、「長方形の中で円の中心に最も近い点」を見つけることです。その点と円の中心との距離が