%02d等同于std :: stringstream?

我想输出一个整数到一个std::stringstreamprintf%02d的等效格式。 有一个更简单的方法来实现这个比:

 std::stringstream stream; stream.setfill('0'); stream.setw(2); stream << value; 

是否有可能将某种格式的标志传输到stringstream ,如(伪代码):

 stream << flags("%02d") << value; 

你可以使用<iomanip>的标准操纵器,但是没有一个整齐的同时兼有fillwidth的操作器:

 stream << std::setfill('0') << std::setw(2) << value; 

编写自己的对象时不难,当插入到stream中时,执行两个函数:

 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; } 

在标准C ++中你不能做得更好。 或者,您可以使用Boost.Format:

 stream << boost::format("%|02|")%value; 

您可以使用

 stream<<setfill('0')<<setw(2)<<value;