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.