Limpiar Stringstream en C++

Suraj P 12 octubre 2023
  1. Utilice el método str("") y clear() para borrar stringstream en C++
  2. Use Scoping para borrar stringstream en C++
Limpiar 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.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub