sstream print espaƱol biblioteca c++ stringstream

c++ - print - cout<< stringstream



stringstream s (4)

Cuando coloco algo en una cadena de caracteres, digamos un número real, si luego inserto ese objeto de cadena de cadenas en cout ... ¿qué estoy viendo?

Por lo general, estoy obteniendo un número extraño. ¿Es esta una ubicación de memoria? Sólo curioso.

Parece que el siguiente comentario lo golpeó, pero esto es lo que estoy tratando de hacer:

string stringIn; stringstream holdBuff; holdBuff << getline(cin, stringIn); cout << holdBuff;

Básicamente, solo estaba tratando de ver qué aspecto tenía HoldBuff una vez que inserté el stringIn. Estoy tratando de que el usuario ingrese una cadena y luego quiero pasar a través de ella buscando su contenido y posiblemente convirtiendo ...


Qué piensas

holdBuff << getline(cin, stringIn);

está haciendo. El tipo de retorno de getline es una referencia a la secuencia que se está leyendo ( cin ) en este caso. Como no hay << definido que tome un std::istream como segundo argumento, el compilador intenta diferentes conversiones: en C ++ 11, std::istream tiene una conversión implícita a bool , y en C ++ anterior, una conversión implícita a std::ios* , o algo similar (pero el único uso válido del valor devuelto es convertirlo en bool ). Por lo tanto, usted emitirá 1 (C ++ 11) o alguna dirección aleatoria (en la práctica, generalmente la dirección del flujo, pero esto no está garantizado). Si desea obtener los resultados de una llamada a getline en un std::ostringstream , necesita dos operaciones (con una verificación de errores entre ellos):

if ( !getline( std::cin, stringIn ) ) // Error handling here... holdBuff << stringIn;

Del mismo modo, para escribir el contenido de un std::ostringstream ,

std::cout << holdBuf.str() ;

es la solucion correcta Si insiste en usar un std::stringstream cuando un std::ostringstream sería más apropiado, también puede hacer:

std::cout << holdBuf.rdbuf();

La primera solución es preferible, sin embargo, ya que es mucho más idiomática.

En cualquier caso, una vez más, no hay ningún operador << que tome ningún tipo de iostream , por lo que terminará con los resultados de la conversión implícita a bool o un puntero.


Sí, es probable que veas la dirección del stringstream.

Si desea mostrar la cadena que contiene, intente

cout << stream.str();


Sí, lo más probable es que sea una ubicación de memoria de alguna forma u otra. Lo más probable es que sea el puntero al propio objeto de cadena.

Podrías confirmar esto de la siguiente manera:

std::stringstream ss; unsigned long long ll = (unsigned long long)&ss; cout << ll;

Dicho esto, cuando desee eliminar una cadena de caracteres, debe usar la función str () de la siguiente manera:

cout << ss.str();


cout << s.rdbuf();

es lo que quieres Alternativamente, usted puede querer

count << s.str();

lo que puede ser más caro en términos de recursos sin embargo.