我可以使用带有printf等格式字符串的c ++ iostream类吗?
基本上,我希望能够做到这样的事情: -
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
轻松使用stringstreams。是否有捷径可寻?
答案 0 :(得分:5)
是的,有Boost Format Library(内部是字符串流)。
#include <boost/format.hpp>
#include <iostream>
int main() {
std::cout << boost::format("%s %s!\n") % "Hello" % "World";
return 0;
}
答案 1 :(得分:2)
您可以编写一个包装函数,返回可以传递给ostringstream的内容。
此功能结合了评论中指出的link 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);
}
}
答案 2 :(得分:0)
这种格式化使用标准C ++流需要相当多的努力。特别是,您必须使用stream manipulators,它可以指定小数点后显示的位数。