输出到字符串的cout相当于什么?

时间:2011-05-06 23:47:02

标签: c++ standard-library

我应该知道这一点,但...... printfsprintf,而cout____?请举个例子。

5 个答案:

答案 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这样的函数