getline (string) en C++

getline() de C++ es una función de biblioteca estándar que se utiliza para leer una string o una línea de un flujo de entrada. Es una parte del encabezado <string> . La función getline() extrae caracteres del flujo de entrada y los agrega al objeto de string hasta que se encuentra el carácter delimitador. Al hacerlo, el valor previamente almacenado en el objeto de string str será reemplazado por la string de entrada, si corresponde. La función getline() se puede representar de dos formas: 

Sintaxis:

istream& getline(istream& is, 
           string& str, char delim);

2. Parámetros: 

  • es: es un objeto de la clase istream y le dice a la función sobre el flujo desde donde leer la entrada.
  • str: es un objeto de string, la entrada se almacena en este objeto después de leerse de la secuencia.
  • delim: es el carácter de delimitación que le dice a la función que deje de leer más entradas después de llegar a este carácter.

Ejemplo: para demostrar el uso del delimitador en la función getline() .

C++

#include  <iostream>
#include  <bits/stdc++.h>
  
using namespace std;
  
//macro definitions
#define MAX_NAME_LEN 60  // Maximum len of your name can't be more than 60
#define MAX_ADDRESS_LEN 120  // Maximum len of your address can't be more than 120
#define MAX_ABOUT_LEN 250 // Maximum len of your profession can't be more than 250
  
int main () {
  char y_name[MAX_NAME_LEN], y_address[MAX_ADDRESS_LEN], about_y[MAX_ABOUT_LEN];
  
  cout << "Enter your name: ";
  cin.getline (y_name, MAX_NAME_LEN);
  
  cout << "Enter your City: ";
  cin.getline (y_address, MAX_ADDRESS_LEN);
  
  cout << "Enter your profession (press $ to complete): ";
  cin.getline (about_y, MAX_ABOUT_LEN, '$');    //$ is a delimiter 
  
  cout << "\nEntered details are:\n"<<'\n';
  cout << "Name: " << y_name << endl;
  cout << "Address: " << y_address << endl;
  cout << "Profession is: " << about_y << endl;
}

Producción:

Producción

Nota: En el ejemplo anterior, si   #define MAX_NAME_LEN 6, entonces, en este caso, si cruza el límite definido, entonces , en este caso, su programa detendrá la ejecución y saldrá, es aplicable para cada macro que haya usado con la función getline() . Y obtendrá la salida de la siguiente manera:

C++

#include  <iostream>
#include  <bits/stdc++.h>
  
using namespace std;
  
//macro definitions
#define MAX_NAME_LEN 60  // Maximum length of your name can't be more than 60
#define MAX_ADDRESS_LEN 120  // Maximum length of your address can't be more than 120
#define MAX_ABOUT_LEN 250 // Maximum length of your profession can't be more than 250
  
int main () {
  char y_name[MAX_NAME_LEN], y_address[MAX_ADDRESS_LEN], about_y[MAX_ABOUT_LEN];
  
  cout << "Enter your name: ";
  cin.getline (y_name, MAX_NAME_LEN);
  
  cout << "Enter your City: ";
  cin.getline (y_address, MAX_ADDRESS_LEN);
  
  cout << "Enter your profession (press $ to complete): ";
  cin.getline (about_y, MAX_ABOUT_LEN, '$');    //$ is a delimiter 
  
  cout << "\n\nEntered details are:\n\n";
  cout << "Name: " << y_name << endl;
  cout << "Address: " << y_address << endl;
  cout << "Profession is: " << about_y << endl;
}

Producción:

Salida_2nd

 Aquí, es comprensible que la longitud del campo de nombre fuera más que el límite definido, por eso el programa detiene la ejecución y sale. 

1. Sintaxis: 

istream& getline (istream& is, string& str);

2. La segunda declaración es casi la misma que la primera. La única diferencia es que estos últimos tienen un carácter de delimitación que es por defecto el carácter de nueva línea (\n).
Parámetros: 
 

  • es: es un objeto de la clase istream y le dice a la función sobre el flujo desde donde leer la entrada.
  • str: es un objeto de string, la entrada se almacena en este objeto después de leerse de la secuencia.

El siguiente programa demuestra el funcionamiento de la función getline()
Ejemplo 1: 
 

GeeksforGeeks-CPP-Foundation-Course

CPP

// C++ program to demonstrate getline() function
  
#include <iostream>
#include <string>
using namespace std;
  
int main()
{
    string str;
  
    cout << "Please enter your name: \n";
    getline(cin, str);
    cout << "Hello, " << str
         << " welcome to GfG !\n";
  
    return 0;
}

Aporte: 

Harsh Agarwal

Producción:  

Hello, Harsh Agarwal welcome to GfG!

Ejemplo 2: podemos usar la función getline() para dividir una oración en función de un carácter. Veamos un ejemplo para entender cómo se puede hacer.  

CPP

// C++ program to understand the use of getline() function
  
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    string S, T;
  
    getline(cin, S);
  
    stringstream X(S);
  
    while (getline(X, T, ' ')) {
        cout << T << endl;
    }
  
    return 0;
}

Aporte:

Hello, Faisal Al Mamun. Welcome to GfG!

Producción:  

Hello,
Faisal
Al
Mamun.
Welcome
to
GfG!

Precaución: esta función considera una nueva línea o carácter (‘\n’) como el carácter de delimitación y el carácter de nueva línea es una entrada válida para esta función.
A continuación se muestra un ejemplo de cómo una nueva línea puede causar problemas:
Ejemplo:  

CPP

// C++ program to demonstrate
// anomaly of delimitation of
// getline() function
#include <iostream>
#include <string>
using namespace std;
  
int main()
{
    string name;
    int id;
  
    // Taking id as input
    cout << "Please enter your id: \n";
    cin >> id;
  
    // Takes the empty character as input
    cout << "Please enter your name: \n";
    getline(cin, name);
  
    // Prints id
    cout << "Your id : " << id << "\n";
  
    // Prints nothing in name field
    // as "\n" is considered a valid string
    cout << "Hello, " << name
         << " welcome to GfG !\n";
  
    // Again Taking string as input
    getline(cin, name);
  
    // This actually prints the name
    cout << "Hello, " << name
         << " welcome to GfG !\n";
  
    return 0;
}

Aporte: 

7
MOHIT KUMAR

Producción:  

Your id : 7
Hello,  welcome to GfG !
Hello, MOHIT KUMAR welcome to GfG !

Artículos relacionados: 

Este artículo es aportado por Harsh Agarwal y mejorado por Faisal Al Mamun . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *