相当于 %02d 与 std::stringstream?
Posted
技术标签:
【中文标题】相当于 %02d 与 std::stringstream?【英文标题】:Equivalent of %02d with std::stringstream? 【发布时间】:2010-05-15 09:21:35 【问题描述】:我想用printf
的%02d
的等效格式将整数输出到std::stringstream
。有没有比以下更简单的方法来实现这一点:
std::stringstream stream;
stream.setfill('0');
stream.setw(2);
stream << value;
是否可以将某种格式标志流式传输到stringstream
,例如(伪代码):
stream << flags("%02d") << value;
【问题讨论】:
不应该是stream.fill('0')
和stream.width(2)
吗?您使用操纵器的名称几乎就像您知道自己问题的答案一样?
【参考方案1】:
您可以使用来自 <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;
【讨论】:
【参考方案2】:你可以使用
stream<<setfill('0')<<setw(2)<<value;
【讨论】:
【参考方案3】:在标准 C++ 中你不能做得更好。或者,您可以使用 Boost.Format:
stream << boost::format("%|02|")%value;
【讨论】:
如果您没有将stream
用于其他任何内容,则不需要它,因为boost::format
已经生成了一个字符串。
我听说你必须把它传递给str(...)
然后
Jahonnes 你可以使用 std::string myStr = (boost::format("%|02|")%value).str();【参考方案4】:
是否可以将某种格式标志流式传输到
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的作者。
【讨论】:
【参考方案5】:我认为你可以使用 c-lick 编程。
你可以使用snprintf
喜欢这个
std::stringstream ss;
char data[3] = 0;
snprintf(data,3,"%02d",value);
ss<<data<<std::endl;
【讨论】:
以上是关于相当于 %02d 与 std::stringstream?的主要内容,如果未能解决你的问题,请参考以下文章