print mystr biblioteca c++ stringstream

c++ - mystr - ¿Cómo se borra una variable stringstream?



stringstream java (8)

Es un problema conceptual.

Stringstream es un flujo, por lo que sus iteradores son hacia adelante, no pueden regresar. En un flujo de cadena de salida, necesita un flush () para reinicializarlo, como en cualquier otro flujo de salida.

Ya he probado varias cosas,

std::stringstream m; m.empty(); m.clear();

ambos de los cuales no funcionan.


Esta debería ser la forma más confiable, independientemente del compilador:

m=std::stringstream();


Estos no descartan los datos en el stringstream en gnu c ++

m.str(""); m.str() = ""; m.str(std::string());

Lo siguiente vacía la cadena de caracteres para mí:

m.str().clear();


Para todos los tipos de biblioteca estándar, la función miembro empty() es una consulta, no un comando, es decir, significa "¿estás vacío?" no "por favor tira tu contenido".

La función miembro clear() se hereda de ios y se usa para borrar el estado de error de la secuencia, por ejemplo, si una secuencia de archivos tiene el estado de error establecido en eofbit (final de archivo), al llamar a clear() se establecerá estado de error de nuevo a goodbit (sin error).

Para borrar el contenido de un stringstream , usando:

m.str("");

Es correcto, aunque utilizando:

m.str(std::string());

es técnicamente más eficiente, porque evita invocar el constructor std::string que toma const char* . Pero cualquier compilador en estos días debería ser capaz de generar el mismo código en ambos casos, por lo que me gustaría ir con lo que sea más legible.


Puede borrar el estado de error y vaciar el strignstream todo en una línea

std::stringstream().swap(m); // swap m with a default constructed stringstream

Esto restablece efectivamente m a un estado construido por defecto


Siempre lo estoy buscando

{ std::stringstream ss; ss << "what"; } { std::stringstream ss; ss << "the"; } { std::stringstream ss; ss << "heck"; }


mis 2 centavos

Esto pareció funcionar para mí en xcode y dev-c ++. Tenía un programa en forma de menú que, si se ejecutaba de forma iterativa, según la solicitud de un usuario, llenaría una variable de cadena de caracteres que funcionaría bien la primera vez que el código Ejecutar pero no borraría la cadena de caracteres la próxima vez que el usuario ejecutará el mismo código. pero las dos líneas de código a continuación finalmente borraron la variable de cadena de caracteres cada vez antes de llenar la variable de cadena. (2 horas de prueba y error y búsquedas de google), por cierto, usar cada línea por su cuenta no funcionaría.

//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";


m.str("");

parece funcionar.