Limpiar Stringstream en C++
-
Utilice el método
str("")yclear()para borrarstringstreamen C++ -
Use Scoping para borrar
stringstreamen C++
Este artículo enseñará diferentes formas de borrar o vaciar stringstreams en C++.
Utilice el método str("") y clear() para borrar stringstream en C++
Para borrar o vaciar stringstream, podemos usar el método str("") y clear(), pero tenemos que usar ambos métodos; de lo contrario, es posible que el programa no funcione correctamente, es decir, no dará la salida correcta.
Código de ejemplo (usando str("") únicamente):
#include <bits/stdc++.h>
using namespace std;
int main() {
string temp;
string temp2;
stringstream ss;
for (int i = 0; i < 5; i++)
{
ss.str("");
ss << i;
temp = ss.str();
ss >> temp2;
cout << temp << " " << ss.str() << " " << temp2 << endl;
}
}
Producción :
0 0 0
0
0
0
0
El resultado anterior no es correcto porque el uso de ss.str("") borra la cadena, pero el problema es que no podemos agregar nuevos valores a la transmisión.
Es por eso que en la primera línea, obtenemos el resultado correcto 0 0 0, pero en la siguiente iteración, ambas cadenas, temp y temp2, quedan vacías ya que no se agregan nuevos valores a la secuencia. Entonces es como asignar una cadena vacía a ambos.
Código de ejemplo (usando str("") y clear() juntos):
La función clear() restablece el estado de error de la transmisión. Cada vez que hay un error en la transmisión, el estado de error se establece en eofbit (fin del archivo), y al usar clear(), podemos restablecerlo a goodbit, diciendo que no hay error.
#include <bits/stdc++.h>
using namespace std;
int main() {
string temp;
string temp2;
stringstream ss;
for (int i = 0; i < 5; i++)
{
ss.clear();
ss.str("");
ss << i;
temp = ss.str();
ss >> temp2;
cout << temp << " " << ss.str() << " " << temp2 << endl;
}
}
Producción :
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
Explicación: Aquí, obtenemos el resultado correcto ya que usar clear() junto con str("") nos permite agregar nuevos valores a la secuencia después de borrarla.
Use Scoping para borrar stringstream en C++
Aunque ineficaz como el primer método, esta es una solución para borrar el stringstream. Podemos utilizar el concepto de alcance.
Código de ejemplo:
#include <bits/stdc++.h>
using namespace std;
int main() {
{
stringstream ss;
ss << "our code part ";
cout << ss.str() << endl;
}
{
stringstream ss;
ss << "Tony ";
cout << ss.str() << endl;
}
{
stringstream ss;
ss << "stark ";
cout << ss.str() << endl;
}
}
Producción :
our code part
Tony
stark
Explicación: aquí, tenemos que usar corchetes { } para definir el alcance de esa variable stringstream. Una vez fuera del alcance, se borra.
