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 (""):