C++ で文字列配列を Int に変換する方法

  1. char 配列を int 型に変換するには std::strtol 関数を使う
  2. 関数 sscanf() を用いて char 配列を int に変換する

この記事では、C++ で char 配列を int 型に変換するメソッドを紹介します。

char 配列を int 型に変換するには std::strtol 関数を使う

strtol メソッドは配列 char の最初の有効な文字を整数型に変換する。この関数は、3 番目のパラメータとして変換された整数を表す数値の基底値を受け取ります。2 番目のパラメータは char **endptr 型で、これはオプションであり、渡された場合は最後に解釈された文字の前の文字を指すアドレスを格納します。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    auto str1_n = std::strtol(str1.data(), nullptr, 10);
    printf("%ld", str1_n);

    return EXIT_SUCCESS;
}

出力:

23323

以下の例は、2 番目のパラメータに非 nulllptr を指定した strtol 関数を示しています。ここでは printf 関数を型検証ツールとしてのみ利用しており、それ以外の場合は cout を利用すべきであることに注意してください。また、strtol のエラー処理ルーチンを実装することも重要です。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");
    char *char_part = nullptr;

    auto str1_n = std::strtol(str1.data(), &char_part, 10);
    printf("%ld\n", str1_n);
    printf("%s\n", char_part);;

    return EXIT_SUCCESS;
}

出力:

23323
experimental_string

関数 sscanf() を用いて char 配列を int に変換する

sscanf 関数は文字列バッファから入力を読み込み、2 番目のパラメータとして渡されるフォーマット指定子に従って解釈する。数値は変数 int へのポインタに格納される。書式指定子については、sscanf のマニュアルページで詳しく説明されている。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    int str1_n;
    sscanf(str1.data(), "%d", &str1_n);
    printf("%d\n", str1_n);

    return EXIT_SUCCESS;
}

出力:

23323

上の例を再実装して、入力文字列の非数値部分を格納することもできる。この場合、第 2 引数に %s フォーマット指定子を追加し、第 4 引数に出力先の char ポインタを渡します。呼び出し元から可変数の引数を受け取ることができるので、sscanf は可変関数であることに注意してほしい。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    int str1_n3;
    string str2 {};
    sscanf(str1.data(), "%d%s", &str1_n3, str2.data());
    printf("%d\n", str1_n3);
    printf("%s\n", str2.data());

    return EXIT_SUCCESS;
}

出力:

23323
experimental_string

関連記事 - C++ Char

  • C++で文字列を Char 配列に変換する方法
  • comments powered by Disqus