解析のための文字列ストリームstringstream
std::stringstreamでテキストをトークン化し、型付きの値として解析します。
「解析のための文字列ストリームstringstream」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
stringstream とは
std::stringstream は、文字列を iostream インターフェースでラップします。cin や cout と同じように、>> と << で読み書きできます。
#include <sstream>
std::stringstream ss;stringstream で文字列を構築する
異なる型の値を組み合わせて、複雑な文字列を構築できます。結果を取得するには .str() を呼び出します。
std::stringstream out;
out << "User: " << name << ", Age: " << age;
std::string result = out.str();stringstream で解析する
文字列から初期化し、>> で値を取り出します。空白を区切りとしてトークン化します。
std::stringstream in("42 3.14 hello");
int i; double d; std::string s;
in >> i >> d >> s;1 行をトークンに分割する
getline と stringstream を組み合わせると、1 行ずつトークン化できます。
std::string line = "1 2 3 4 5";
std::stringstream ss(line);
int n;
while (ss >> n) {
std::cout << n * n << " ";
}
// 1 4 9 16 25区切り文字で分割する
stringstream の getline に区切り文字を渡すと、カンマ、セミコロン、その他の任意の文字で分割できます。
std::string csv = "apple,banana,cherry";
std::stringstream ss(csv);
std::string fruit;
while (std::getline(ss, fruit, ',')) {
std::cout << fruit << "\n";
}istringstream と ostringstream
3 種類があります。
std::istringstream— 読み取り専用std::ostringstream— 書き込み専用std::stringstream— 読み書き両用
明確さを保つため、必要最小限のものを使用してください。
解析エラーを確認する
抽出に失敗すると(型が間違っている場合など)、ストリームに fail ビットが設定されます。抽出後に !ss または ss.fail() を確認してください。
std::stringstream ss("not_a_number");
int x;
if (!(ss >> x)) {
std::cout << "Parse failed";
}stringstream をリセットする
stringstream を再利用するには、状態と内容をクリアします。
std::stringstream ss;
ss << "first";
ss.str(""); // clear contents
ss.clear(); // clear flags
ss << "second";数値から文字列へ
単純な変換では、std::to_string のほうが stringstream より短く書けます。
std::string s = std::to_string(42); // "42"
std::string p = std::to_string(3.14); // "3.140000"ストリームを使わずに文字列を数値へ変換する
std::stoi、std::stod、std::stoll は文字列から数値を解析し、不正な入力があると例外を送出します。
int n = std::stoi("42");
double d = std::stod("3.14");
// std::stoi("xyz") throws std::invalid_argumentC++17 std::from_chars
最高速度が必要な場合は、<charconv> にある std::from_chars を使用すると、例外やメモリ確保なしで解析できます。頻繁に実行される処理に適しています。
確認問題
std::stringstream を使用するには、どのヘッダーをインクルードする必要がありますか。
まとめ
std::stringstream を使うと、文字列をストリームとして扱い、簡単に解析や書式設定を行えます。std::getline と組み合わせると、区切り文字で分割できます。単純な場合は std::to_string と std::stoi を優先してください。
よくある質問
「解析のための文字列ストリームstringstream」レッスンは無料ですか?
はい。「解析のための文字列ストリームstringstream」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「解析のための文字列ストリームstringstream」で何を学びますか?
std::stringstreamでテキストをトークン化し、型付きの値として解析します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「解析のための文字列ストリームstringstream」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- std::stringとC形式のchar配列
- 文字列操作:concat、substr、find、replace
- 解析のための文字列ストリームstringstream
- 文字列変換:to_stringとstoi