文字列変換:to_stringとstoi
std::to_string、std::stoi、std::stodで文字列と数値型を安全に相互変換します。
「文字列変換:to_stringとstoi」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
文字列変換が重要な理由
ユーザー入力、設定ファイル、JSON、URL、ログなどでは、数値とテキストの相互変換が常に必要になります。
std::to_string
std::to_string は、組み込みの数値型を文字列に変換します。デフォルトの書式が使用されます。
#include <string>
std::string a = std::to_string(42); // "42"
std::string b = std::to_string(-7); // "-7"
std::string c = std::to_string(3.14); // "3.140000"浮動小数点数のデフォルト書式
double に対する to_string は、小数点以下 6 桁を使用します。細かく制御するには、std::fixed と std::setprecision を指定した std::stringstream、または C++20 の std::format を使用します。
std::stoi: 文字列から int へ
std::stoi で整数を解析します。先頭の空白を読み飛ばし、最初に数字以外の文字が現れた位置で停止します。
int n = std::stoi("42"); // 42
int m = std::stoi(" -7abc"); // -7 (stops at 'a')解析終了位置を取得する
解析が停止した位置のインデックスを受け取るポインターを渡します。混在した文字列を解析するときに便利です。
std::string s = "42px";
size_t pos;
int n = std::stoi(s, &pos);
std::cout << pos; // 2 (parsed "42", stopped at 'p')不正な入力では Stoi が例外を送出する
数字が 1 つも見つからない場合、stoi は std::invalid_argument を送出します。数値が範囲を超えた場合は std::out_of_range を送出します。
try {
int x = std::stoi("not_a_number");
} catch (const std::invalid_argument& e) {
std::cout << "Parse failed";
}基数変換
3 番目の引数で基数(2~36)を選択します。0 を渡すと、接頭辞から自動的に判別します。
int hex = std::stoi("ff", nullptr, 16); // 255
int bin = std::stoi("1010", nullptr, 2); // 10
int auto_detect = std::stoi("0xff", nullptr, 0); // 255stol stoll stoul stoull
その他の整数型に対応するバリエーションです。
std::stol— longstd::stoll— long longstd::stoul— unsigned longstd::stoull— unsigned long long
stof stod stold
float、double、long double に対応する浮動小数点数用のバリエーションです。
double d = std::stod("3.14159");
float f = std::stof("2.71");C++17 std::from_chars: 例外なし
std::from_chars は例外を送出せずに解析します。ec(エラーコード)と ptr(解析終了位置)を持つ構造体を返すため、頻繁に実行するループで推奨されます。
#include <charconv>
std::string s = "42";
int val;
auto result = std::from_chars(s.data(), s.data() + s.size(), val);
if (result.ec == std::errc{}) {
// success
}C++17 std::to_chars: メモリ確保なし
from_chars の逆の処理で、メモリを確保せずに数値をバッファーへ書き込みます。標準ライブラリで利用できる最速の変換方法です。
確認問題
std::stoi("abc") はどの例外を送出しますか。
まとめ
std::to_string は数値を文字列に変換し、std::stoi などは文字列を数値として解析します。どちらも失敗時には例外を送出します。例外を送出しない高性能な解析には std::from_chars を使用してください。
よくある質問
「文字列変換:to_stringとstoi」レッスンは無料ですか?
はい。「文字列変換:to_stringとstoi」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「文字列変換:to_stringとstoi」で何を学びますか?
std::to_string、std::stoi、std::stodで文字列と数値型を安全に相互変換します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「文字列変換:to_stringとstoi」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::stringとC形式のchar配列
- 文字列操作:concat、substr、find、replace
- 解析のための文字列ストリームstringstream
- 文字列変換:to_stringとstoi