¿Cómo puedo convertir de stringstream a string en C++?
-
20-08-2019 - |
Pregunta
¿Cómo puedo convertir de std::stringstream
a std::string
en C++?
Necesito llamar a un método en la cadena de flujo?
Solución
yourStringStream.str ()
Otros consejos
Utilice el .str () - método :
Administra el contenido del objeto de cadena subyacente.
1) Devuelve una copia de la cadena subyacente como llamando a
rdbuf()->str()
.2) Reemplaza el contenido de la cadena subyacente como llamando a
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 llama directamente a
c_str()
en el resultado destr()
(por ejemplo enauto *ptr = out.str().c_str();
) da como resultado un puntero colgante ...
std::stringstream::str()
es el método que usted 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 más una herramienta genérica.Puede utilizar la clase 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 usted está trabajando con std::wstring
tipo de cadenas, se debe preferir std::wstringstream
o std::wostringstream
en su 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 se puede ejecutar en tiempo seleccionable, usted también debe hacer es 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 de NumericValue
en los ejemplos anteriores también se pueden pasar como std::string
o std::wstring
para ser utilizado con el std::ostringstream
y std::wostringstream
casos respectivamente.No es necesario para la NumericValue
para ser un valor numérico.
De memoria, llama a stringstream :: str () para obtener el valor std :: string.
Me gustaría agregar que debe terminar el búfer strstream con '\ 0' antes de llamar al método .str (). De lo contrario, obtendrá caracteres incorrectos al volcar la cadena.