Espacios de nombres
Variantes
Acciones

std::getline

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
Definido en el archivo de encabezado <string>
template<class CharT, class Traits, class Allocator >

std::basic_istream<CharT,Traits>& getline(std::basic_istream<CharT,Traits>& input,
                                           std::basic_string<CharT,Traits,Allocator>& str,

                                           CharT delim );
(1)
template<class CharT, class Traits, class Allocator >

std::basic_istream<CharT,Traits>& getline(std::basic_istream<CharT,Traits>&& input,
                                           std::basic_string<CharT,Traits,Allocator>& str,

                                           CharT delim );
(1) (desde C++11)
template<class CharT, class Traits, class Allocator >

std::basic_istream<CharT,Traits>& getline(std::basic_istream<CharT,Traits>& input,

                                           std::basic_string<CharT,Traits,Allocator>& str );
(2)
template<class CharT, class Traits, class Allocator >

std::basic_istream<CharT,Traits>& getline(std::basic_istream<CharT,Traits>&& input,

                                           std::basic_string<CharT,Traits,Allocator>& str );
(2) (desde C++11)

getline lee los caracteres de una secuencia de entrada y los coloca en una cadena:

1) Se comporta como una función de entrada sin formato, UnformattedInputFunction, excepto que input.gcount() no se ve afectada. Después de construir y comprobar el objeto centinela, realiza lo siguiente:
1) Llama a str.erase();
2) Extrae caracteres de input y los añade a str hasta que ocurre una de las siguientes situaciones (comprobadas en el orden indicado):
a) existe la condición de fin de archivo en input, en cuyo caso getline establece eofbit.
b) el siguiente carácter de entrada disponible es delim, como si se hubiera probado mediante Traits::eq(c, delim), en cuyo caso el carácter delimitador se extrae de input, pero no se añade a str.
c) se han almacenado str.max_size() caracteres, en cuyo caso getline establece failbit y retorna.
3) Si no se extrajeron caracteres por alguna razon (ni siquiera el delimitador descartado), getline establece failbit y retorna.
2) Lo mismo que getline(input, str, input.widen('\n')), es decir, el delimitador por defecto es el carácter fin de línea.

Contenido

[editar]Parámetros

input - El flujo del cual obtener los datos.
str - La cadena en la cual poner los datos.
delim - El carácter delimitador.

[editar]Valor de retorno

input

[editar]Notas

Al consumir una entrada delimitada por espacios en blanco (p. ej., int n;std::cin>> n;) cualquier espacio en blanco que siga, incluyendo el carácter de nueva línea, se dejará en el flujo de entrada. Entonces, al cambiar a entrada orientada a líneas, la primer línea que se recupere con getline será solamente ese espacio en blanco. En el dado caso que esto sea comportamiento no deseado, las posibles soluciones incluyen:

  • hacer una llamada inicial explícita superflua a getline;
  • eliminar espacios en blanco consecutivos con std::cin>>std::ws;
  • ignorar todos los caracteres restantes en la línea de entrada con cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

[editar]Ejemplo

El siguiente ejemplo demuestra cómo usar la función getline para leer la entrada del usuario y cómo procesar un archivo/fichero línea por línea.

#include <string>#include <iostream>#include <sstream>   int main(){// saludar al usuariostd::string nombre;std::cout<<"Cual es tu nombre? "; std::getline(std::cin, nombre);std::cout<<"Hola "<< nombre <<", encantado(a) de conocerte.\n";   // leer un archivo/fichero línea por líneastd::istringstream input; input.str("1\n2\n3\n4\n5\n6\n7\n");int suma =0;for(std::string line; std::getline(input, line);){ suma +=std::stoi(line);}std::cout<<"\La suma es: "<< suma <<"\n";}

Posible salida:

Cual es tu nombre? Aquiles Pinto Flores Hola Aquiles Pinto Flores, encantado(a) de conocerte.   La suma es 28

[editar]Véase también

Extrae caracteres hasta que se encuentra el carácter dado.
(función miembro pública de std::basic_istream)[editar]
close