可能重複:
std::string formatting like sprintf如何向iostream發送格式字符串?
我可以使用C++ iostream類與格式字符串如printf?
基本上,我希望能夠做一些事情,如: -
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
容易使用stringstreams。是否有捷徑可尋?
可能重複:
std::string formatting like sprintf如何向iostream發送格式字符串?
我可以使用C++ iostream類與格式字符串如printf?
基本上,我希望能夠做一些事情,如: -
snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
容易使用stringstreams。是否有捷徑可尋?
是的,有Boost Format Library(這是內部的stringstreams)。
#include <boost/format.hpp>
#include <iostream>
int main() {
std::cout << boost::format("%s %s!\n") % "Hello" % "World";
return 0;
}
這種格式的需要使用標準的C++流相當多付出更多的努力。尤其是,您必須使用stream manipulators,它可以指定小數點後顯示的位數。
您可以編寫一個包裝函數,它返回可以傳遞給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);
}
}
標準C++格式是更詳細的,可悲的。你會想要一個圖書館。 –