Як перетворити з stringstream в string в C ++?


124

Як перетворити з std::stringstreamна std::stringв C ++?

Чи потрібно викликати метод у потоковому потоці?


4
Чи читали ви відповіді на своє попереднє запитання, яке висвітлювало це?

Відповіді:



74

Використовуйте .str () - метод :

Керує вмістом основного об'єкта рядка.

1) Повертає копію базового рядка, як якщо б виклик rdbuf()->str().

2) Заміщує вміст підрядного рядка, ніби зателефонувавши rdbuf()->str(new_str)...

Примітки

Копія базового рядка, повернутого str, є тимчасовим об'єктом, який буде знищений в кінці виразу, тому безпосередньо виклик c_str()результату str()(наприклад, в 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щоб число було числовим значенням.


10

З пам'яті ви телефонуєте, stringstream::str()щоб отримати std::stringзначення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.