Limpiar Stringstream en C++
-
Utilice el método
str("")
yclear()
para borrarstringstream
en C++ -
Use Scoping para borrar
stringstream
en 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.