Notas de estudio de C/C++ doce Entradas y salidas (E/S) (3)

Una corriente de cuerdas

1. Información general

        Todos los ejemplos de E/S que ha visto hasta ahora están escribiendo en cout o leyendo cin. Sin embargo, hay otro conjunto de clases llamadas clases de flujo de cadenas que permiten que los operadores familiares de inserción (<<) y extracción (>>) funcionen con cadenas. Al igual que istream y ostream, los flujos de cadenas proporcionan un búfer para almacenar datos. Sin embargo, a diferencia de cin y cout, estos flujos no están conectados a los canales de E/S (por ejemplo, teclado, monitor, etc.). Uno de los principales usos de los flujos de cadenas es almacenar en búfer la salida para su visualización posterior o procesar la entrada línea por línea.

        Hay seis clases de flujo para cadenas: istringstream (derivado de istream), ostringstream (derivado de ostream) y stringstream (derivado de iostream) para leer y escribir cadenas ordinarias de ancho de caracteres. wistringstream, wostringstream y wstringstream se utilizan para leer y escribir cadenas anchas. Para usar secuencias de cadenas, debe #incluir el encabezado de la secuencia.

1, flujo de cuerdas

        Hay dos formas de poner datos en un flujo de cadena:

        1. Utilice el operador de inserción (<<):

std::stringstream os;
os << "en garde!" << '\n'; // insert "en garde!" into the stringstream

        2. Utilice la función str(cadena) para establecer el valor del búfer:

std::stringstream os;
os.str("en garde!"); // set the stringstream buffer to "en garde!"

        También hay dos formas de obtener datos de un flujo de cadenas:

        1. Utilice la función str() para recuperar el resultado del búfer:

std::stringstream os;
os << "12345 67.89" << '\n';
std::cout << os.str();

//输出
12345 67.89

        2. Utilice el operador de extracción (>>):

std::stringstream os;
os << "12345 67.89"; // insert a string of numbers into the stream

std::string strValue;
os >> strValue;

std::string strValue2;
os >> strValue2;

// print the numbers separated by a dash
std::cout << strValue << " - " << strValue2 << '\n';


//输出
12345 - 67.89

        Tenga en cuenta que el operador >> itera sobre cadenas: cada uso sucesivo de >> devuelve el siguiente valor extraíble en la secuencia. Por otro lado, str() devuelve el valor completo de la secuencia, incluso si >> se ha utilizado en la secuencia.

2. Conversión entre cadenas y números

        Debido a que los operadores de inserción y extracción saben cómo manejar todos los tipos de datos básicos, podemos usarlos para convertir cadenas en números y viceversa.

        Primero, veamos cómo convertir números en cadenas:

std::stringstream os;

int nValue{ 12345 };
double dValue{ 67.89 };
os << nValue << ' ' << dValue;

std::string strValue1, strValue2;
os >> strValue1 >> strValue2;

std::cout << strValue1 << ' ' << strValue2 << '\n';

//输出

12345 67.89

        Ahora vamos a convertir la cadena numérica en un número:

std::stringstream os;
os << "12345 67.89"; // insert a string of numbers into the stream
int nValue;
double dValue;

os >> nValue >> dValue;

std::cout << nValue << ' ' << dValue << '\n';

//输出
12345 67.89

        Hay varias formas de vaciar el búfer de un flujo de cadenas.

        1. Use str() con una cadena de estilo C en blanco para establecerla en una cadena vacía:

std::stringstream os;
os << "Hello ";

os.str(""); // erase the buffer

os << "World!";
std::cout << os.str();

        2. Use str() con un objeto std::string en blanco para establecerlo en una cadena vacía:

std::stringstream os;
os << "Hello ";

os.str(std::string{}); // erase the buffer

os << "World!";
std::cout << os.str();

        Ambos programas producen los siguientes resultados:

World!

        Al borrar el flujo de cadenas, llame a la función clear():

std::stringstream os;
os << "Hello ";

os.str(""); // erase the buffer
os.clear(); // reset error flags

os << "World!";
std::cout << os.str();

        clear() restablece cualquier indicador de error que se haya establecido y devuelve la transmisión a un estado normal. Hablaremos más sobre los estados de transmisión y los indicadores de error en la siguiente lección.

Supongo que te gusta

Origin blog.csdn.net/bashendixie5/article/details/125027427
Recomendado
Clasificación