テキストをフォーマットするために使用するのが好きstd::ostrstream
ですが、標準出力に出力するのではなく、 (メンバーstd::string
にアクセスして) に書き込みます。std::ostrstream::str()
どうやらこれは現在廃止されているようです。では、ストリームに書き込む場合と同じように、書式設定されたオブジェクトを文字列に書き込むにはどうすればよいでしょうか?
4 に答える
を使用できますstd::ostringstream
。同様に、代わりにstd::istrstream
を使用する必要がありますstd::istringstream
。<sstream>
これらのクラスのヘッダーを含める必要があります。
なぜ非推奨になったのかを説明するこの質問も見ることができます。strstream
他の方もおっしゃっていますstd::ostringstream
が、交換です。
すべてのメモリを自動的に管理するため、使い終わったときにメモリを確実に解放するためstd::ostrstream
に呼び出す必要がないため、より便利 (かつ安全)です。freeze(false)
を使用する必要がありますstd::stringstream
。また、を参照してくださいboost::lexical_cast
。
std::stringstream
<<
との両方をサポートし>>
ます。 std::ostringstream
のみをサポートし<<
、std::istringstream
のみをサポートします>>
。両方の演算子を使用できると便利なことがよくあります。
を使用することもできますboost::format
。次に、次のようなことができます。
int a = 1;
std::string b("foo");
std::string s = boost::str(
boost::format("some text, some vars=%1%, %2%, %1%") % a % b % a);
次に、s
が含まれます"some text, some vars=1, foo, 1"
。
私の意見では、これは演算子を使用するよりも便利な場合があり<<
ます。
参考までに、フォーマット仕様も含めます。