Compartir a través de


Función de plantilla getline

Extraiga las cadenas de la secuencia de entrada línea por línea.

// (1) delimiter as parameter template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>& is,     basic_string<CharType, Traits, Allocator>& str, CharType delim);  template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>&& is,     basic_string<CharType, Traits, Allocator>& str, const CharType delim);  // (2) default delimiter used template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>& is,     basic_string<CharType, Traits, Allocator>& str);  template<class Allocator, class Traits, class Allocator> basic_istream<Allocator, Traits>& getline(     basic_istream<Allocator, Traits>&& is,     basic_string<Allocator, Traits, Allocator>& str); 

Parámetros

  • is
    La secuencia de entrada de la que se extraerá una cadena.

  • str
    La cadena en la que se leen los caracteres de la secuencia de entrada.

  • delim
    El delimitador de línea.

Valor devuelto

La secuencia de entrada is.

Comentarios

El par de firmas de función marcado como (1) extrae caracteres de is hasta encontrar delim y los almacena en str.

El par de firmas de función marcado como (2) utiliza una nueva línea como el delimitador de línea predeterminado y se comporta como getline(is, str, is.widen('\n')).

La segunda función de cada par es análoga a la primera para admitir las referencias rvalue.

La extracción se detiene en los siguientes casos:

  • El fin de archivo, en cuyo caso la marca de estado interno de is se establece en ios_base::eofbit.

  • Después de que la función extraiga un elemento que se compare con relación de igualdad con delim, en cuyo caso el elemento no se vuelve a colocar ni se anexa a la secuencia controlada.

  • Después de que la función extraiga los elementos str.max_size, en cuyo caso la marca de estado interno de is se establece en ios_base::failbit.

  • Otros errores distintos de los que mencionamos, en cuyo caso la marca de estado interno de is se establece en ios_base::badbit.

Para obtener información sobre las marcas de estado interno, consulte ios_base::iostate.

Si la función no extrae ningún elemento, la marca de estado interno de is se establece en ios_base::failbit. En cualquier caso, getline devuelve is.

Si se lanza una excepción, is y str se dejan en un estado válido.

Ejemplo

El código siguiente muestra getline() en dos modos: primero, con el delimitador predeterminado (nueva línea) y, después, con un espacio en blanco como delimitador. El carácter de fin de archivo (CTRL-Z en el teclado) se utiliza para controlar la terminación de los bucles while. Establece la marca de estado interno de cin en eofbit. Para que el segundo bucle while funcione correctamente, se debe borrar dicha marca con basic_ios::clear().

// compile with: /EHsc /W4
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string str;
    vector<string> v1;
    cout << "Enter a sentence, press ENTER between sentences. (Ctrl-Z to stop): " << endl;
    // Loop until end-of-file (Ctrl-Z) is input, store each sentence in a vector.
    // Default delimiter is the newline character.
    while (getline(cin, str)) {
        v1.push_back(str);
    }

    cout << "The following input was stored with newline delimiter:" << endl;
    for (const auto& p : v1) {
        cout << p << endl;
    }

    cin.clear();

    vector<string> v2;
    // Now try it with a whitespace delimiter
    while (getline(cin, str, ' ')) {
        v2.push_back(str);
    }

    cout << "The following input was stored with whitespace as delimiter:" << endl;
    for (const auto& p : v2) {
        cout << p << endl;
    }
}

Salida

                            

Requisitos

Encabezado: <string>

Espacio de nombres: std

Vea también

Referencia

basic_string (Clase)

<string>