[Turn] Introducción al uso común de stringstream (sstream)

[Turn] Introducción al uso común de stringstream (sstream)

Reimpreso de este blog

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

1. Información general

<sstream>Se definen tres clases: isringstream, ostringstream y stringstream, que se utilizan para realizar operaciones de entrada, salida y entrada y salida de flujo, respectivamente. Este artículo se centra en el flujo de cadenas e introduce las operaciones de entrada y salida de flujos.

<sstream>Se utiliza principalmente para la conversión de tipos de datos. Dado <sstream>que se utilizan objetos de cadena en lugar de matrices de caracteres (método snprintf), se evita el peligro de desbordamiento del búfer; además, debido a que los tipos de parámetros entrantes y objetos de destino se deducen automáticamente, no hay error El problema del formateador. En pocas palabras, en comparación con la conversión de tipos de datos de la biblioteca C, es <sstream>más segura, automática y directa.

2 Ejemplo de código

2.1 Conversión de tipo de datos

Aquí hay un ejemplo de código que presenta el proceso de conversión de tipo int en tipo de cadena. El código de muestra (stringstream_test1.cpp) es el siguiente:

#include <string>
#include <sstream>
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    
    
    stringstream sstream;
    string strResult;
    int nValue = 1000;
 
    // 将int类型的值放入输入流中
    sstream << nValue;
    // 从sstream中抽取前面插入的int类型的值,赋给string类型
    sstream >> strResult;
 
    cout << "[cout]strResult is: " << strResult << endl;
    printf("[printf]strResult is: %s\n", strResult.c_str());
 
    return 0;
}

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

img

2.2 Empalme de múltiples cadenas

Este ejemplo introduce el almacenamiento de múltiples cadenas en cadena de cadenas para lograr el propósito de concatenar múltiples cadenas (de hecho, se puede lograr usando la clase de cadena). Al mismo tiempo, presenta el método de borrado de cadena de cadenas.

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

#include <string>
#include <sstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    
    
    stringstream sstream;
 
    // 将多个字符串放入 sstream 中
    sstream << "first" << " " << "string,";
    sstream << " second string";
    cout << "strResult is: " << sstream.str() << endl;
 
    // 清空 sstream
    sstream.str("");
    sstream << "third string";
    cout << "After clear, strResult is: " << sstream.str() << endl;
 
    return 0;
}

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

img

A partir del resultado de la ejecución del código anterior, podemos saber:

  • Puede utilizar el método str () para convertir el tipo stringstream en tipo string;
  • Puede poner varias cadenas en stringstream para lograr el propósito de empalmar cadenas;
  • Si desea borrar el flujo de cadenas, debe usar sstream.str ("") ;; el método clear () es adecuado para escenarios donde se realizan múltiples conversiones de tipos de datos. Consulte el ejemplo 2.3 para obtener más detalles.

2.3 Eliminación del flujo de cadenas

Hay dos métodos para borrar stringstream: método clear () y método str ("") Estos dos métodos tienen diferentes escenarios de uso. El escenario de uso del método str ("") se ha introducido en el ejemplo anterior, aquí está el escenario de uso del método clear (). El código de muestra (stringstream_test3.cpp) es el siguiente:

#include <sstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    
    
    stringstream sstream;
    int first, second;
 
    // 插入字符串
    sstream << "456";
    // 转换为int类型
    sstream >> first;
    cout << first << endl;
 
    // 在进行多次类型转换前,必须先运行clear()
    sstream.clear();
 
    // 插入bool值
    sstream << true;
    // 转换为int类型
    sstream >> second;
    cout << second << endl;
 
    return 0;
}

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

img

** Nota: ** En el escenario involucrado en este ejemplo (múltiples conversiones de tipos de datos), el stringstream debe borrarse usando el método clear (), y el tipo de datos no se puede obtener sin usar el método clear () o usando el método str ("") El resultado correcto de la conversión. Las siguientes figuras son los resultados de ejecución cuando no se usa el método clear () y se usa el método str (""):

img

Supongo que te gusta

Origin blog.csdn.net/weixin_44338712/article/details/108052691
Recomendado
Clasificación