【C++言語】文字列を整数に変換する4つの方法

【C++言語】文字列を整数に変換する4つの方法

はじめに

C++で文字列を整数に変換する方法は、初心者にとって少し難しく感じることがあるかもしれません。文字列を整数に変換する場面は多く、ユーザーからの入力を処理したり、ファイルからのデータを処理したりするときに役立ちます。この記事では、C++で文字列を整数に変換するための代表的な方法をいくつか紹介し、各方法の使い方を詳しく解説します。

方法1: std::stoiを使う

最も簡単で直感的な方法は、C++標準ライブラリのstd::stoiを使用する方法です。この関数は、文字列を整数に変換するために使用できます。関数の名前は「string to integer」の略で、簡単に文字列から整数への変換ができます。

std::stoiの基本的な使い方は以下の通りです。


#include 
#include 

int main() {
    std::string str = "12345";
    int num = std::stoi(str);
    std::cout << "整数に変換した結果: " << num << std::endl;
    return 0;
}
    

このプログラムは、文字列「12345」を整数に変換し、結果として「12345」を表示します。std::stoiは、文字列に数値が含まれている限り、整数として変換します。

文字列が数値として解釈できない場合、std::stoiは例外を投げます。例えば、文字列が「abc」のような数字以外の文字を含んでいる場合、実行時にエラーが発生します。

方法2: std::stringstreamを使う

std::stringstreamは、文字列と数値を相互に変換するために使用できるストリームクラスです。この方法では、文字列をstringstreamオブジェクトに読み込ませ、整数として取り出すことができます。

以下のコード例は、std::stringstreamを使って文字列を整数に変換する方法を示しています。


#include 
#include 
#include 

int main() {
    std::string str = "67890";
    std::stringstream ss(str);
    int num;
    ss >> num;
    std::cout << "整数に変換した結果: " << num << std::endl;
    return 0;
}
    

この方法では、文字列「67890」をstringstreamに読み込ませ、その後整数として変換しています。ストリームから整数を取り出すには、>>演算子を使用します。

std::stringstreamは例外を投げないので、文字列が不正な場合には、変換に失敗して数値が0になることがあります。これを防ぐためには、ストリームが正しく数値を取り出せたかをチェックする必要があります。

方法3: atoiを使う

C++の古い方法として、atoi(文字列を整数に変換するCの関数)を使うことができます。これは、整数に変換できる文字列を指定すると、整数を返します。atoiは標準ライブラリの一部であり、C++でも利用可能です。

以下に、atoiを使った例を示します。


#include 
#include   // atoiのために必要

int main() {
    const char* str = "54321";
    int num = std::atoi(str);
    std::cout << "整数に変換した結果: " << num << std::endl;
    return 0;
}
    

このコードでは、文字列「54321」を整数に変換しています。atoiは、数値の部分だけを取り出して変換し、数値以外の文字列の場合は0を返します。そのため、文字列が数字以外のものを含んでいる場合、結果として0が返されることに注意が必要です。

方法4: C++17のstd::from_charsを使う

C++17では、std::from_charsという新しい関数が追加されました。この関数は、文字列を高速に整数に変換するためのものです。std::from_charsは、標準ライブラリに含まれ、低レベルで効率的に動作します。

以下は、std::from_charsを使用した例です。


#include 
#include   // from_charsのために必要

int main() {
    std::string str = "98765";
    int num;
    std::from_chars(str.data(), str.data() + str.size(), num);
    std::cout << "整数に変換した結果: " << num << std::endl;
    return 0;
}
    

この関数は、文字列の範囲を指定して整数に変換します。std::from_charsは、非常に効率的で、パフォーマンスが重要な場面で有用です。なお、この関数もstd::stoiatoiのように変換できない場合にはエラーが発生しませんが、変換の結果をチェックする方法があります。

エラーチェック

文字列から整数への変換時には、エラーチェックを行うことが重要です。変換が失敗した場合、予期しない動作を避けるために適切な処理を行いましょう。例えば、std::stoiの場合、変換が失敗すると例外std::invalid_argumentstd::out_of_rangeがスローされます。


#include 
#include 

int main() {
    std::string str = "abc123"; // 数字以外の文字が含まれている
    try {
        int num = std::stoi(str);
        std::cout << "整数に変換した結果: " << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cout << "無効な引数が含まれています: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cout << "範囲外の値です: " << e.what() << std::endl;
    }
    return 0;
}
    

上記の例では、文字列に数字以外の文字が含まれているため、std::invalid_argument例外が発生します。このようにして、エラー発生時に適切なメッセージを表示し、プログラムを安定させることができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です