C ++相当于sprintf?
我知道std::cout
是printf
的C ++等价物。
什么是sprintf
的C ++等价物?
std::ostringstream
例:
#include <iostream> #include <sstream> // for ostringstream #include <string> int main() { std::string name = "nemo"; int age = 1000; std::ostringstream out; out << "name: " << name << ", age: " << age; std::cout << out.str() << '\n'; return 0; }
输出:
name: nemo, age: 1000
使用Boost.Format 。 它有类似printf
的语法,types安全, std::string
结果,以及其他很多漂亮的东西。 你不会回去的。
sprintf在C ++中工作得很好。
您可以使用iomanip头文件格式化输出stream。 检查这个 !
这是一个很好的c ++ sprintf函数。 如果你用得太多,stream可能会变得很难看。
std::string string_format(const std::string &fmt, ...) { int n, size=100; std::string str; va_list ap; while (1) { str.resize(size); va_start(ap, fmt); int n = vsnprintf(&str[0], size, fmt.c_str(), ap); va_end(ap); if (n > -1 && n < size) return str; if (n > -1) size = n + 1; else size *= 2; } }
在C ++ 11及更高版本中,std :: string保证使用以'\0'
结尾的连续存储,因此使用&str[0]
将其转换为char *
是合法的。
使用一个stringstream来达到相同的效果。 另外,你可以包含<cstdio>
,但仍然使用snprintf。