重複の可能性:
sprintf のような std::string フォーマット
c++ iostream クラスを printf のようなフォーマット文字列で使用できますか?
基本的に、私は次のようなことができるようにしたい:-
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
簡単に文字列ストリームを使用します。これを行う簡単な方法はありますか?
重複の可能性:
sprintf のような std::string フォーマット
c++ iostream クラスを printf のようなフォーマット文字列で使用できますか?
基本的に、私は次のようなことができるようにしたい:-
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
簡単に文字列ストリームを使用します。これを行う簡単な方法はありますか?
はい、Boost Format Library (内部的には stringstreams) があります。
#include <boost/format.hpp>
#include <iostream>
int main() {
std::cout << boost::format("%s %s!\n") % "Hello" % "World";
return 0;
}
ostringstream に配信できるものを返すラッパー関数を作成できます。
この関数は、コメントで指摘されたリンクmoooeeeep に示されているソリューションのいくつかを組み合わせたものです。
std::string string_format(const char *fmt, ...) {
std::vector<char> str(100);
va_list ap;
while (1) {
va_start(ap, fmt);
int n = vsnprintf(&str[0], str.size(), fmt, ap);
va_end(ap);
if (n > -1 && n < str.size()) {
str.resize(n);
return &str[0];
}
str.resize(str.size() * 2);
}
}
この種のフォーマットには、標準の C++ ストリームを使用すると、かなりの労力がかかります。特に、小数点以下の桁数を指定できるストリーム マニピュレータを使用する必要があります。