我应该知道这一点,但...... printf
是sprintf
,而cout
是____
?请举个例子。
答案 0 :(得分:13)
听起来你正在寻找std::ostringstream
。
当然C ++流不使用格式说明符,如C的printf()
- 类型函数;他们使用manipulators
。
示例,根据要求:
#include <sstream>
#include <iomanip>
#include <cassert>
std::string stringify(double x, size_t precision)
{
std::ostringstream o;
o << std::fixed << std::setprecision(precision) << x;
return o.str();
}
int main()
{
assert(stringify(42.0, 6) == "42.000000");
return 0;
}
答案 1 :(得分:1)
std::ostringstream
您可以使用它来创建类似Boost lexical cast的内容:
#include <sstream>
#include <string>
template <typename T>
std::string ToString( const T & t ) {
std::ostringstream os;
os << t;
return os.str();
}
使用中:
string is = ToString( 42 ); // is contains "42"
string fs = ToString( 1.23 ) ; // fs contains something approximating "1.23"
答案 2 :(得分:1)
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
ostringstream s;
s.precision(3);
s << "pi = " << fixed << 3.141592;
cout << s.str() << endl;
return 0;
}
pi = 3.142
答案 3 :(得分:1)
以下是一个例子:
#include <sstream>
int main()
{
std::stringstream sout;
sout << "Hello " << 10 << "\n";
const std::string s = sout.str();
std::cout << s;
return 0;
}
如果要清除流以供重用,可以执行
sout.str(std::string());
另请查看Boost Format库。
答案 4 :(得分:-1)
你对cout的概念有一点误解。 cout是流和运营商&lt;&lt;是为任何流定义的。因此,您只需要另一个写入字符串的流以输出数据。您可以使用标准流,如std :: ostringstream或定义自己的流。
所以你的比喻不是很精确,因为cout不是像printf和sprintf这样的函数