0Pricing
C++ Academy · レッスン

解析のための文字列ストリーム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_argument

C++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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. std::stringとC形式のchar配列
  2. 文字列操作:concat、substr、find、replace
  3. 解析のための文字列ストリームstringstream
  4. 文字列変換:to_stringとstoi
← C++ Academyに戻る