El std::istringstream es un objeto de clase de string que se utiliza para transmitir la string en diferentes variables y, de manera similar, los archivos se pueden transmitir en strings. Los objetos de esta clase utilizan un búfer de string que contiene una secuencia de caracteres. Se puede acceder a esta secuencia de caracteres como un objeto de string.
Archivo de cabecera:
#include <sstream>
1. Transmisión de enteros desde una string con std::istringstream
Una forma de transmitir una string es usar un objeto de flujo de string de entrada std::istringstream desde el encabezado. Una vez que se ha creado un objeto std::istringstream , la string puede transmitirse y almacenarse mediante el operador de extracción ( >> ). El operador de extracción leerá hasta que se alcance el espacio en blanco o hasta que falle la transmisión.
A continuación se muestra la ilustración de std::istringstream :
CPP
// C++ program to illustrate std::istringstream #include <iostream> #include <sstream> #include <string> using std::istringstream; using std::string; using std::cout; // Driver Code int main() { // Input string string a("1 2 3"); // Object class of istringstream istringstream my_stream(a); // Variable to store number n int n; // Stream a number till white space // is encountered my_stream >> n; // Print the number cout << n << "\n"; }
1
El objeto std::istringstream también se puede usar como valor booleano para determinar si la última operación de extracción falló. Esto sucede si no hay más strings en la transmisión. Por ejemplo, si la transmisión todavía tiene más caracteres, podemos transmitir la string nuevamente.
El operador de extracción >> escribe el flujo en la variable a la derecha del operador y devuelve el objeto std::istringstream , por lo que toda la expresión my_stream >> n es un objeto std::istringstream que devuelve un valor booleano, es decir, verdadero si flujo es posible de lo contrario devolver falso.
A continuación se muestra la implementación del uso de std::istringstream de la manera anterior:
Type 1
// C++ program to illustrate std::istringstream #include <iostream> #include <sstream> #include <string> using std::istringstream; using std::string; using std::cout; // Driver Code int main() { // Input string string a("1 2 3"); // Object class of istringstream istringstream my_stream(a); // Variable to store number n int n; // Testing to see if the stream was // successful and printing results. while (my_stream) { // Streaming until space is // encountered my_stream >> n; // If my_stream is not empty if (my_stream) { cout << "That stream was successful: " << n << "\n"; } // Else print not successful else { cout << "That stream was NOT successful!" << "\n"; } } return 0; }
Type 2
// C++ program to illustrate std::istringstream #include <iostream> #include <sstream> #include <string> using std::istringstream; using std::string; using std::cout; // Driver Code int main() { // Input string string a("1 2 3"); // Object class of istringstream istringstream my_stream(a); // Variable to store number n int n; // Testing to see if the stream was // successful and printing results. while (my_stream >> n) { cout << "That stream was successful: " << n << "\n"; } cout << "That stream was NOT successful!" << "\n"; return 0; }
That stream was successful: 1 That stream was successful: 2 That stream was successful: 3 That stream was NOT successful!
2. Strings con tipos mixtos
En las ilustraciones anteriores, la string contiene solo espacios en blanco y caracteres que se pueden convertir a int. Si la string tiene tipos mixtos, es decir, contiene más de un tipo de datos en el flujo, entonces se puede usar como se ilustra a continuación.
A continuación se muestra la ilustración de std::istringstream para los tipos mixtos:
Programa 1:
CPP
// C++ program to illustrate std::istringstream // when string has integer followed by character #include <iostream> #include <sstream> #include <string> using std::istringstream; using std::string; using std::cout; // Driver Code int main() { // Input string string str("1, 2, 3"); // Object class of istringstream istringstream my_stream(str); // Variable to store the number n // and character ch char c; int n; // Traverse till input stream is valid while (my_stream >> n >> c) { cout << "That stream was successful: " << n << " " << c << "\n"; } cout << "The stream has failed." << "\n"; return 0; }
That stream was successful: 1, That stream was successful: 2, The stream has failed.
Programa 2:
CPP
// C++ program to illustrate std::istringstream // to tokenize the string #include <iostream> #include <sstream> #include <string> using std::istringstream; using std::string; using std::cout; // Driver Code int main() { // Input string string str("abc, def, ghi"); // Object class of istringstream istringstream my_stream(str); // To store the stream string string token; size_t pos = -1; // Traverse till stream is valid while (my_stream >> token) { // If ',' is found then tokenize // the string token while ((pos = token.rfind(',')) != std::string::npos) { token.erase(pos, 1); } // Print the tokenize string cout << token << '\n'; } }
abc def ghi
Referencia: http://www.cplusplus.com/reference/sstream/istringstream/
Publicación traducida automáticamente
Artículo escrito por psycho_incredible y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA