可能重复:
std::string 格式,如 sprintf
我可以将 c++ iostream 类与 printf 之类的格式字符串一起使用吗?
基本上,我希望能够做类似的事情:-
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
轻松使用字符串流。是否有捷径可寻?
可能重复:
std::string 格式,如 sprintf
我可以将 c++ iostream 类与 printf 之类的格式字符串一起使用吗?
基本上,我希望能够做类似的事情:-
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
轻松使用字符串流。是否有捷径可寻?
您可以编写一个包装器函数,该函数返回您可以传递到 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++ 流进行这种格式化需要付出更多的努力。特别是,您必须使用流操作符,它可以指定要在小数点后显示的位数。