Как мне преобразовать поток строк в строку в C ++? - PullRequest
107 голосов
/ 19 марта 2009

Как мне конвертировать из std::stringstream в std::string в C ++?

Нужно ли вызывать метод в потоке строк?

Ответы [ 5 ]

172 голосов
/ 19 марта 2009

yourStringStream.str ()

73 голосов
/ 19 марта 2009

Используйте .str () - метод :

Управляет содержимым базового строкового объекта.

1) Возвращает копию базовой строки, как будто вызывая rdbuf()->str().

2) Заменяет содержимое базовой строки, как будто вызывая rdbuf()->str(new_str) ...

Примечания

Копия базовой строки, возвращаемая str, является временным объектом, который будет уничтожен в конце выражения, поэтому непосредственно вызывается c_str() в результате str() (например, в auto *ptr = out.str().c_str();) приводит к висячему указателю ...

12 голосов
/ 26 сентября 2015

std::stringstream::str() - это метод, который вы ищете.

С std::stringstream:

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::stringstream ss;
    ss << NumericValue;
    return ss.str();
}

std::stringstream - более общий инструмент. Вы можете использовать более специализированный класс std::ostringstream для этой конкретной работы.

template <class T>
std::string YourClass::NumericToString(const T & NumericValue)
{
    std::ostringstream oss;
    oss << NumericValue;
    return oss.str();
}

Если вы работаете с типом строк std::wstring, вы должны вместо этого выбрать std::wstringstream или std::wostringstream.

template <class T>
std::wstring YourClass::NumericToString(const T & NumericValue)
{
    std::wostringstream woss;
    woss << NumericValue;
    return woss.str();
}

если вы хотите, чтобы тип символа вашей строки мог выбираться во время выполнения, вы также должны сделать его переменной шаблона.

template <class CharType, class NumType>
std::basic_string<CharType> YourClass::NumericToString(const NumType & NumericValue)
{
    std::basic_ostringstream<CharType> oss;
    oss << NumericValue;
    return oss.str();
}

Для всех описанных выше методов вы должны включить следующие два заголовочных файла.

#include <string>
#include <sstream>

Обратите внимание, что аргумент NumericValue в приведенных выше примерах также может быть передан как std::string или std::wstring для использования с экземплярами std::ostringstream и std::wostringstream соответственно. Для NumericValue необязательно указывать числовое значение.

10 голосов
/ 19 марта 2009

Из памяти вы вызываете stringstream :: str (), чтобы получить значение std :: string.

0 голосов
/ 24 февраля 2014

Я хотел бы добавить, что вы должны завершить буфер strstream '\ 0' перед вызовом метода .str (). В противном случае вы получите плохие символы при сбросе строки.

...