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



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



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

677   5  

5 ответов:

yourStringStream.str ()

использовать .ул()-метод:

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

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

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

Примечания

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

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

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 или .

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

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

Comments

    Ничего не найдено.