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

胡金庫 2023年10月12日
  1. char 配列を int 型に変換するには std::strtol 関数を使用する
  2. 関数 sscanf() を用いて char 配列を int に変換する
C++ で文字列配列を Int に変換する方法

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

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

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

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Char