2009-03-19 23 views

Respuesta

138

yourStringStream.str()

10

Desde la memoria, llama a stringstream :: str() para obtener el valor de std :: string.

66

Uso del .str()-method:

Gestiona el contenido del objeto de cadena subyacente.

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

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

Notas

La copia de la cadena subyacente devuelto por str es un objeto temporal que será destruido en al final de la expresión, así que llamar directamente c_str() en el resultado de str() (por ejemplo, en auto *ptr = out.str().c_str();) resulta en una referencia colgante ...

+6

+1 porque proporcionó un enlace, a diferencia de las otras respuestas equivalentes. – rmeador

-2

Me gustaría agregar que debe terminar el almacenamiento intermedio strstream con '\ 0' antes de llamar al método .str(). De lo contrario, obtendrás malos caracteres al tirar la cadena.

+4

Esto no parece ser el caso. – Carcigenicate

+0

Te estás confundiendo entre stringstream y [strstream] (http://kera.name/articles/2008/09/tomalaks-tuesday-tip-2-string-streams/). –

+0

De acuerdo, esto describe strstream no stringstream. – bpeikes

9

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

Con std::stringstream:

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

std::stringstream es una herramienta más genérico. Puede usar la clase más especializada std::ostringstream para 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 std::wstring tipo de cadenas, se debe preferir std::wstringstream o std::wostringstream lugar.

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

si desea que el tipo de carácter de la cadena podría ser seleccionable por el tiempo de marcha, también debe hacerlo 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 NumericValue en los ejemplos anteriormente también se pueden pasar como std::string o std::wstring para ser utilizado con las instancias std::ostringstream y std::wostringstream respectivamente. No es necesario que el NumericValue sea un valor numérico.

+2

Esto es demasiado esfuerzo para una pregunta tan terrible. –

Cuestiones relacionadas