C++ で文字列配列を Int に変換する方法
胡金庫
2023年10月12日
この記事では、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
著者: 胡金庫