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.
