getline
Sintaxis:
#include <string> istream& std::getline( istream& is, string& s ); istream& std::getline( istream& is, string& s, charT delimiter );
La cabecera <string> define la función global getline() para leer cadenas desde un flujo de E/S. Esta función no forma parte de la interface de la clase string pero aún así interactúa con ella, leyendo una línea y almacenándola en la cadena s. Si se especifica un delimitador, getline() usa ese delimitador para determinar cuándo terminar de leer datos (de manera parecida a como lo hace get()). Por lo demás, se puede invocar de la siguiente manera:
return getline( is, s, is.widen( '\n' ) );
NOTA: istream es el tipo de flujo basic_istream<charT> correspondiente a un tipo de caracter charT.
En el siguiente ejemplo se usa getline() para leer un archivo de líneas de texto desde la entrada estándar y mostrar los resultados en la salida estándar:
string s; getline( cin, s ); cout << "Se ha ingresado " << s << endl;
Después de haber recibido datos en una cadena, puede resultar conveniente usar stringstreams para extraer datos de esa cadena. Por ejemplo el siguiente código lee números desde la entrada estándar, ignorando líneas "comentadas" al estilo C, es decir con dos slash (%%%%) al inicio:
// se espera recibir números delimitador por blancos, // o líneas de texto empezando con dos slashes (//) string s; while( getline(cin,s) ) { if( s.size() >= 2 && s[0] == '/' && s[1] == '/' ) { cout << " comentario ignorado: " << s << endl; } else { istringstream ss(s); double d; while( ss >> d ) { cout << " número obtenido: " << d << endl; } } }
Al ejecutar este código con una entrada de datos provista por el usuario se obtiene un resultado como el siguiente:
'' test
comentario ignorado: '' test
23.3 -1 3.14159
número obtenido: 23.3
número obtenido: -1
número obtenido: 3.14159
'' next batch
comentario ignorado: '' next batch
1 2 3 4 5
número obtenido: 1
número obtenido: 2
número obtenido: 3
número obtenido: 4
número obtenido: 5
50
número obtenido: 50Una invocación a getline() empieza a leer desde la posición donde se está leyendo en un archivo por lo que se puede usar para leer el resto de una línea cuando se ha detenido la lectura por encontrar un delimitador.
Tópicos Relacionados: get, getline, stringstream