getline

De cppreference.com
Saltar a: navegación, buscar

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: 50

Una 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

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas
Otros idiomas