Что эквивалентно cout для вывода в строки? - PullRequest
6 голосов
/ 07 мая 2011

Я должен знать это уже, но ... printf означает sprintf, как cout означает ____?Пожалуйста, приведите пример.

Ответы [ 5 ]

13 голосов
/ 07 мая 2011

Звучит так, будто вы ищете 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 голос
/ 07 мая 2011

Вот пример:

#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 библиотека.

1 голос
/ 07 мая 2011
#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
1 голос
/ 07 мая 2011
 std::ostringstream

Вы можете использовать это, чтобы создать что-то вроде лексического приведения Boost:

#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"
0 голосов
/ 07 мая 2011

У вас есть небольшое недопонимание концепции кут. cout - это поток, а оператор << определен для любого потока. Итак, вам просто нужен другой поток, который записывает в строку, чтобы вывести ваши данные. Вы можете использовать стандартный поток, такой как std :: ostringstream, или определить свой собственный. </p>

Так что ваша аналогия не очень точна, так как cout не такая функция, как printf и sprintf

...