Как мне преобразовать из строкового потока в строковый в C ++?

124

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

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

Ник Болтон
источник
4
Вы читали ответы на свой предыдущий вопрос, который касался этого?

Ответы:

205

​​​​​​​

yourStringStream.str()
Тайлер МакГенри
источник
74

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

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

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

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

Ноты

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

Эмиль Х
источник
14

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чтобы это было числовое значение.

hkBattousai
источник
10

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

Тимо Гойш
источник