¿Qué es C ++ Stringstream y cómo usarlo??

¿Qué es C ++ Stringstream y cómo usarlo??

Un objeto de cadena instanciado desde la clase de cadena es una estructura de datos de lista. La lista es una serie de personajes, y se aprecia como tal. El objeto de cadena C ++ tiene muchos métodos. Sin embargo, carece de ciertas operaciones, que se ofrecen mejor si se ve como una corriente. Eso es donde stringstream viene en. Stringstream es una transmisión, que puede usarse para:

- Cuente el número de palabras en un objeto de cadena

- Obtener frecuencias de palabras individuales en un objeto de cadena

- Convertir una palabra en forma de texto en el objeto de cadena a un número, y viceversa

Mover caracteres del objeto de cadena al programa C ++ está ingresando y representado por el stringstream objeto. Mover caracteres del programa C ++ al objeto de cadena está saliendo. Stringstream (yo.mi. sstream) usa el isttringstream y ostringstream clases. Un objeto instanciado desde isttringstream es responsable de ingresar caracteres a un stringstream. Un objeto instanciado desde ostringstream es responsable de producir caracteres de un stringstream a un objeto de cadena.

Este tutorial explica que ststream es y cómo usarlo. El objeto de cadena de destino es parte del programa C ++.

Para hacer entrada, salida o ambas, en una sesión, el programa C ++ debe comenzar con:

#incluir
#incluir
#incluir

Contenido del artículo

  • Creación de un objeto Stringstream
  • Operación de stringstream de entrada
  • Operación de salida de salida de salida
  • Enviar primeras palabras a variables
  • Contando un número de palabras en cadena literal
  • Frecuencias de palabras individuales
  • Cadena al número y viceversa
  • Conclusión

Creación de un objeto Stringstream

Se sabe que stringstream se puede declarar y aplicar al mismo tiempo en una declaración. Sin embargo, ese no es el enfoque en este tutorial. En este tutorial, un stringstream El objeto se instancia desde una clase en una declaración y se usa en otra declaración.

A stringstream se puede instanciar para leer (ingresar). A stringstream se puede instanciar para escribir (salida). A stringstream se puede instanciar tanto para leer como para escribir.

Para crear un objeto de transmisión para leer, use:

sstream strm (iOS_Base :: in);

donde strm es el objeto de flujo; y "en" de la clase de iOS_Base significa para leer.

Para crear un objeto de transmisión para escribir, use:

sstream strm (iOS_Base :: out);

donde strm es el objeto de flujo; y "fuera" de la clase iOS_Base significa para escribir.

Para crear un objeto de transmisión para leer o escribir, use:

sstream strm (iOS_Base :: in | iOS_Base :: out);

Donde “ios_base :: en | ios_base :: out ", es para leer o escribir.

Operación de stringstream de entrada

El texto para ingresar a un stringstream desde un objeto de cadena se puede hacer de dos maneras: usar la inserción (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

stringstream strm1 (iOS_Base :: in);
strm1 << "We are the world!";
cadena stri2 = "Esta es la tierra!";
Stringstream strm2 (iOS_Base :: in);
strm2 << stri2;
Stringstream strm3 (iOS_Base :: in);
strm3.str ("Marte es el siguiente.");
String stri4 = "¿Qué pasa con Júpiter??";
Stringstream strm4 (iOS_Base :: in);
strm4.str (stri4);
regresar 0;

El objeto de cadena puede ser el literal o el identificador. Tenga en cuenta que en la declaración del objeto sstream, se usa "stringstream" y no "sstream", aunque ambos términos significan lo mismo. El término sstream debe usarse en la directiva incluir.

Operación de salida de salida de salida

Una palabra es cualquier texto de cadena que no tenga ningún espacio (") dentro. Salir desde un stringstream significa enviar una palabra de cadena desde el objeto sstream a un objeto de cadena. Esto necesita el operador de extracción (>>). El siguiente programa envía una palabra desde un objeto sstream a un objeto de cadena:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << "love";
cadena stri = "odio";
strm >> stri;
cout << stri << endl;
regresar 0;

La salida es:

amar

Cualquier valor de cadena que el objeto de cadena podría haber tenido se reemplaza. Si el stringstream se declara arriba y sin ningún argumento, entonces es para entrada o salida.

Si el valor de cadena del objeto stringstream (búfer) tiene espacios, solo se enviará la primera palabra. La función miembro sstream, str (), debe usarse para enviar todo el valor de la cadena, incluidos los espacios. Str () se puede usar para convertir una cadena literal en el contenido sstream. También se puede usar para devolver todo el contenido del búfer de transmisión, incluidos los espacios, al objeto de cadena. El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << "I love her, but he hates her.";
cadena stri;
stri = strm.str ();
cout << stri << endl;
regresar 0;

La salida es:

La amo, pero la odia.

Enviar primeras palabras a variables

En la cuerda,

"La amo, pero la odia."

Si las primeras 5 palabras deben ser representadas por las variables, A, B, C, D, E, entonces estas variables se pueden hacer para sostener las palabras. El siguiente código ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << "I love her, but he hates her.";
Cadena A, B, C, D, E;
strm >> a >> b >> c >> d >> e;
cout << a << " << b << " << c << " << d << " << e << endl;
regresar 0;

La salida es:

La amo, pero él

Un solo personaje es una palabra. Tenga en cuenta que la coma se ha unido a "ella". Si la coma hubiera sido separada de "ella", entonces se habría considerado una palabra separada.

Contando un número de palabras en cadena literal

En la sección anterior, solo se identificaron las primeras 5 palabras. Para enviar todas las palabras a diferentes variables, se debe conocer el número de palabras. Si el problema es solo saber el número de palabras en el búfer sstream, entonces eso se puede hacer en un bucle. Es enviando todas las palabras a una variable, mientras contaba el número de veces que se realiza el envío, y hasta que se alcanza el final de la corriente (fin de archivo). El siguiente código ilustra esto:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << "I love her, but he hates her.";
int contador = 0;
cadena temp;
mientras (!strm.eof ())
strm >> temp;
contador += 1;

cout << counter << endl;
regresar 0;

La salida es 7. La parada completa está unida a la segunda "ella". Tenga en cuenta que el indicador para el final del archivo es la función miembro sstream, eof ().

Frecuencias de palabras individuales

En el valor de cadena,

"La amo y él ama a su hermana, aunque odia a su hermano."

La palabra, "ella", ocurre 3 veces, y la frecuencia de "ella" se indica que es 3. La palabra, "él", aparece 2 veces, y se dice que la frecuencia de "él" es 2. El resto de las palabras tienen una frecuencia de 1 cada uno. La frecuencia de cada palabra se puede determinar de la siguiente manera:

Tener todas las palabras en un mapa C ++ sin repetición. Considere la siguiente declaración:

MP [temp] ++;

Donde MP es un objeto de mapa. La primera vez que se encuentra esta declaración en un bucle, se ajusta en un nuevo par de clave/valor, cuya clave es la palabra de cadena de la temperatura variable y cuyo valor es 1. La próxima vez que se encuentre en la misma mientras que el bucle, con esta clave en particular, no se agrega un nuevo par de clave/valor al mapa. El valor de este par de clave/valor se incrementa simplemente.

Entonces, la estrategia es tener esta declaración en un bucle y todas las palabras en el búfer ssstream que se leen en una variable temporal. Y, cada valor para cada par de clave/valor en el mapa finalmente se convierte en la frecuencia de la clave (palabra). El siguiente programa ilustra esto:

#incluir
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << "I love her and he loves her sister, though he hates her brother.";
cadena temp;
mapa MP;
while (strm >> temp)
MP [temp] ++;

para (mapa:: iterator it = mp.comenzar(); él != MP.fin(); IT ++)
cout << it->primero << " => " << it->segundo << endl;
regresar 0;

La salida es:

I => 1
y => 1
hermano. => 1
odia => 1
él => 2
ella => 3
amor => 1
amores => 1
Hermana, => 1
aunque => 1

Cadena al número y viceversa

Cadena al número

Para convertir una palabra de cadena a un número, simplemente envíe la palabra de cadena desde el búfer sstrream a una variable declarada como un número. Para convertir a un int, envíe la palabra de cadena a una variable int. Para convertir a un flotador, envíe la palabra de cadena a una variable flotante. El siguiente programa ilustra estos:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream STRM;
strm << " 30 ";
int myint;
strm >> myint;
int intresult = myInt + 10;
cout << intResult << endl;
strm << " 2.5 ";
flotar myfloat;
strm >> myfloat;
Float FLTRESULT = myfloat + 0.3;
cout << fltResult << endl;
regresar 0;

La salida es:

40
2.8

Número de cadena

Para convertir un número en una palabra de cadena, simplemente envíe el número al búfer sstream. Luego, lea el búfer de transmisión en un objeto de cadena. Para convertir un int en una cadena, envió el entero al sstream. Para convertir un flotador a una cadena, envíe el flotador al sstream. El siguiente programa ilustra estos:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;
int main ()

Stringstream strm1;
int myint = 30;
strm1 << myInt;
cadena intstr;
strm1 >> intstr;
cadena intstrres = intstr + "bueno";
cout << intStrRes << endl;
Stringstream strm2;
flotante myflt = 2.5;
strm2 << myflt;
cadena fltstr;
strm2 >> fltstr;
cadena fltstrres = fltstr + "sí";
cout << fltStrRes << endl;
regresar 0;

La salida es:

30 bien
2.5 SÍ

Se han utilizado dos objetos de transmisión aquí para los diferentes tipos de números.

Nota: el ststream Buffer consta solo de personajes.

Conclusión

Stringstream medio Transmisión de cadena. También se escribe como ststream. Es un arroyo. El objetivo para esta transmisión es un objeto de cadena. La transmisión puede usar el operador de inserción (<>). La secuencia es muy útil para los siguientes fines: contar el número de palabras en un objeto de cadena, obtener frecuencias de palabras individuales en un objeto de cadena y convertir una palabra en forma de texto en el objeto de cadena a un número, y viceversa.