[Reimpreso] Uso común de la clase stringstream en C ++

Este artículo presenta principalmente el uso común de la clase stringstream en C ++.

1 Descripción general

<sstream> define tres clases: istringstream, ostringstream y stringstream, que se utilizan para las operaciones de entrada, salida y entrada y salida de flujo, respectivamente. Este artículo se centra en el flujo de cadena, presentando las operaciones de entrada y salida de flujo.

<sstream> se usa principalmente para la conversión de tipos de datos. Debido a que <sstream> usa objetos de cadena en lugar de matrices de caracteres (método snprintf), evita el peligro de desbordamiento del búfer; además, porque los parámetros y los tipos de objetos de destino se derivan automáticamente Fuera, así que no hay problema con el formateador incorrecto. En pocas palabras, en comparación con la conversión del tipo de datos de la biblioteca C, <sstream> es más seguro, automático y directo.

2 Ejemplo de código

2.1 Conversión de tipo de datos

Aquí hay un ejemplo de código que introduce el proceso de convertir un tipo int a un tipo de cadena. El código de muestra (stringstream_test1.cpp) es el siguiente:

1 #include < string >
 2 #include <sstream>
 3 #include <iostream>
 4 #include <stdio.h>
 5   
6  usando el  espacio de nombres std;
 7   
8  int main ()
 9  {
 10      stringstream sstream;
 11      string strResult;
 12      int nValue = 1000 ;
 13   
14      // Coloque el valor de tipo int en la secuencia de entrada 
15      sstream << nValue ;
 16      // Extraiga el valor de tipo int insertado anteriormente de sstream y asígnelo al tipo de cadena 
17     sstream >> strResult;
18   
19      cout << " [cout] strResult es: " << strResult << endl;
20      printf ( " [printf] strResult es:% s \ n " , strResult.c_str ());
21   
22      devuelve  0 ;
23 }

Compile y ejecute el código anterior, los resultados son los siguientes:

2.2 Concatenación de cadenas múltiples

Este ejemplo introduce el almacenamiento de múltiples cadenas en stringstream para lograr el propósito de concatenación de múltiples cadenas (de hecho, se puede lograr usando la clase string) y, al mismo tiempo, introduce el método vacío de stringstream.

El código de muestra (stringstream_test2.cpp) es el siguiente:

1 #include < string >
 2 #include <sstream>
 3 #include <iostream>
 4   
5  usando el  espacio de nombres std;
6   
7  int main ()
 8  {
 9      stringstream sstream;
10   
11      // 将 多个 字符串 放入 sstream 中
12      sstream << " first " << "  " << " string, " ;
13      sstream << " segunda cadena " ;
" strResult es: " << sstream.str () << endl;
15   
16      // 清空 sstream 
17      sstream.str ( "" );
18      sstream << " tercera cadena " ;
19      cout << " Después de borrar, strResult es: " << sstream.str () << endl;
20   
21      devuelve  0 ;
22 }

Compile y ejecute el código anterior, los resultados son los siguientes:

De los resultados de ejecución de código anteriores, podemos saber:

  • Puede usar el método str () para convertir el tipo de secuencia de cadena en tipo de cadena;
  • Se pueden poner varias cadenas en el flujo de cadena para lograr el propósito de la concatenación de cadenas;
  • Si desea borrar el flujo de cadena, debe usar el método sstream.str (""); el método clear () es adecuado para escenarios donde se realizan conversiones de tipos de datos múltiples. Vea el ejemplo 2.3 para más detalles.

2.3 Vaciado de cadena

Hay dos métodos para borrar el flujo de cadena: el método clear () y el método str (""). Estos dos métodos tienen diferentes escenarios de uso. Los escenarios de uso del método str ("") se han introducido en el ejemplo anterior. Aquí están los escenarios de uso del método clear (). El código de muestra (stringstream_test3.cpp) es el siguiente:

1 #include <sstream>
 2 #include <iostream>
 3   
4  usando  namespace std;
 5   
6  int main ()
 7  {
 8      stringstream sstream;
 9      int first, second;
 10   
11      // Insertar string 
12      sstream << " 456 " ;
 13      // Convertir a int type 
14      sstream >> first;
 15      cout << first << endl;
 16   
17      // Antes de realizar conversiones de tipos múltiples, primero debe ejecutar clear () 
18     sstream.clear ();
 19   
20      // Insertar valor bool 
21      sstream << true ;
 22      // Convertir a int tipo 
23      sstream >> segundo;
 24      cout << segundo << endl;
 25   
26      return  0 ;
 27 }

Compile y ejecute el código anterior, los resultados son los siguientes:

Nota: En el escenario involucrado en este ejemplo (conversiones de tipos de datos múltiples), debe usar el método clear () para borrar el flujo de cadena, sin usar el método clear () o el método str (""), no puede obtener el resultado correcto de la conversión del tipo de datos . La siguiente figura muestra los resultados de la ejecución cuando no se usa el método clear () y se usa el método str (""):

 

El texto original se reproduce en https://blog.csdn.net/liitdar/article/details/82598039

Supongo que te gusta

Origin www.cnblogs.com/PennyXia/p/12743255.html
Recomendado
Clasificación