¿Cómo convierto de stringstream a string en C ++?

124

¿Cómo convierto de std::stringstreama std::stringen C ++?

¿Necesito llamar a un método en la secuencia de cadena?

Nick Bolton
fuente
44
¿Leíste las respuestas a tu pregunta anterior, que cubría esto?

Respuestas:

205

​​​​​​​

yourStringStream.str()
Tyler McHenry
fuente
74

Utilice el método .str () :

Administra el contenido del objeto de cadena subyacente.

1) Devuelve una copia de la cadena subyacente como si llamara rdbuf()->str().

2) Reemplaza el contenido de la cadena subyacente como si llamara rdbuf()->str(new_str)...

Notas

La copia de la cadena subyacente devuelta por str es un objeto temporal que se destruirá al final de la expresión, por lo que invocar directamente c_str()el resultado de str()(por ejemplo en auto *ptr = out.str().c_str();) da como resultado un puntero colgante ...

Emil H
fuente
14

std::stringstream::str() es el método que estás buscando.

Con std::stringstream:

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

std::stringstreamEs una herramienta más genérica. Puede usar la clase más especializada std::ostringstreampara este trabajo específico.

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

Si está trabajando con un std::wstringtipo de cadenas, debe preferir std::wstringstreamo en su std::wostringstreamlugar.

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

si desea que el tipo de caracteres de su cadena pueda seleccionarse en tiempo de ejecución, también debe convertirlo en una variable de plantilla.

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

Para todos los métodos anteriores, debe incluir los siguientes dos archivos de encabezado.

#include <string>
#include <sstream>

Tenga en cuenta que, el argumento NumericValueen los ejemplos anteriores también se puede pasar como std::stringo std::wstringpara usarse con las instancias std::ostringstreamy std::wostringstreamrespectivamente. No es necesario NumericValueque sea un valor numérico.

hkBattousai
fuente
10

De memoria, llamas stringstream::str()para sacar el std::stringvalor.

Timo Geusch
fuente