printf
のstd::stringstream
と同等の形式で整数を%02d
に出力したい。これを達成する簡単な方法はありますか:
std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;
(疑似コード)のような、何らかの形式のフラグをstringstream
にストリーミングすることは可能ですか?
stream << flags("%02d") << value;
<iomanip>
から標準のマニピュレータを使用できますが、fill
とwidth
の両方を一度に実行する適切なマニピュレータはありません。
stream << std::setfill('0') << std::setw(2) << value;
ストリームに挿入されたときに両方の機能を実行する独自のオブジェクトを作成するのは難しくありません。
stream << myfillandw( '0', 2 ) << value;
例えば。
struct myfillandw
{
myfillandw( char f, int w )
: fill(f), width(w) {}
char fill;
int width;
};
std::ostream& operator<<( std::ostream& o, const myfillandw& a )
{
o.fill( a.fill );
o.width( a.width );
return o;
}
使用できます
stream<<setfill('0')<<setw(2)<<value;
標準のC++では、これ以上のことはできません。または、Boost.Formatを使用できます。
stream << boost::format("%|02|")%value;
何らかの形式のフラグを
stringstream
にストリーミングすることは可能ですか?
残念ながら、標準ライブラリは書式指定子を文字列として渡すことをサポートしていませんが、 fmt library でこれを行うことができます:
std::string result = fmt::format("{:02}", value); // Python syntax
または
std::string result = fmt::sprintf("%02d", value); // printf syntax
std::stringstream
を構築する必要さえありません。 format
関数は、文字列を直接返します。
免責事項:私は fmt library の著者です。