std::getline
De cppreference.com
| 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 funcin de entrada sin formato, UnformattedInputFunction, excepto que
input.gcount() no se ve afectada. Despus de construir y comprobar el objeto centinela, realiza lo siguiente:1) Llama a
str.erase();2) Extrae caracteres de
input y los aade a str hasta que ocurre una de las siguientes situaciones (comprobadas en el orden indicado):b) el siguiente carcter de entrada disponible es
delim, como si se hubiera probado mediante Traits::eq(c, delim), en cuyo caso el carcter delimitador se extrae de input, pero no se aade 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 carcter fin de lnea.Parmetros
| input | - | El flujo del cual obtener los datos. |
| str | - | La cadena en la cual poner los datos. |
| delim | - | El carcter delimitador. |
Valor de retorno
input
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 carcter de nueva lnea, se dejar en el flujo de entrada. Entonces, al cambiar a entrada orientada a lneas, la primer lnea 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 explcita superflua a
getline; - eliminar espacios en blanco consecutivos con
std::cin >> std::ws; - ignorar todos los caracteres restantes en la lnea de entrada con
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Ejemplo
El siguiente ejemplo demuestra cmo usar la funcin getline para leer la entrada del usuario y cmo procesar un archivo/fichero lnea por lnea.
Ejecuta este cdigo
#include <string>
#include <iostream>
#include <sstream>
int main()
{
// saludar al usuario
std::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 lnea por lnea
std::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
Vase tambin
| Extrae caracteres hasta que se encuentra el carcter dado. (funcin miembro pblica de std::basic_istream)
|