¿Cómo funciona GetLine en c?++?

¿Cómo funciona GetLine en c?++?
C ++ tiene muchas bibliotecas en su biblioteca estándar general. Tres de las bibliotecas involucradas con GetLine son la biblioteca IOSTream, la biblioteca de cadenas y la biblioteca FStream. La biblioteca IOSTream se usa típicamente para la entrada del teclado y la salida a la consola (terminal). La biblioteca de cadenas permite que el programa C ++ tenga una cadena en forma de una estructura de datos, de modo que cada carácter esté en un elemento, y los caracteres pueden acceder a los iteradores y con índices. La biblioteca fstream es para entrada y salida a archivos en el disco.

GetLine es una función miembro para cada una de estas tres bibliotecas. GetLine es una función de entrada. Los datos deja el teclado o el archivo, en el programa en la memoria, como una secuencia de bytes. En los sistemas informáticos de Europa occidental, un personaje es un byte. La secuencia de caracteres llega por primera vez en un área de memoria llamada búfer. Desde el búfer, se copian o se eliminan uno por uno, en el programa que se ejecuta.

getLine () es una de las funciones para extraer los caracteres del búfer en la memoria en el programa, que también está en la memoria. Todo lo que es ingresar. Entonces, GetLine () trata de imputar y no la salida. La extracción significa que los caracteres se eliminan del búfer al programa; no se copian. Los personajes se extraen cuando llegan. La idea de GetLine es que GetLine extrae una línea completa del búfer al programa.

Este artículo trata con GetLine () para las bibliotecas de iOStream y de cadena. getLine () para archivos, normalmente se discute con fstream, por lo que fstream con su función getLine (), no se discutirá aquí.

Contenido del artículo

  • GetLine () y Cin
  • Objeto GetLine () y String
  • Conclusión

GetLine () y Cin

Cout y Cin son dos objetos de la clase IOSTream que ya ha sido instanciada y presente en la biblioteca. Una vez que la clase IOSTream se ha incluido en el programa C ++, estos objetos se pueden usar de inmediato, sin instanciación (o declaración). Cout es para enviar un texto a la terminal, y Cin es para recibir un texto del teclado.

Como el usuario está escribiendo en el teclado, los caracteres se hacen eco en la terminal y entran en un búfer en la memoria. Mientras sucede, Cin está esperando. Tan pronto como el usuario presione la tecla ENTER, CIN para el programa tomaría tantas palabras como se codificó para tomar del búfer. Cuando el usuario presionó la tecla Intro, esa era una línea. Si CIN se codificó con su función de miembro GetLine (), entonces CIN llevaría toda la línea al programa.

Una línea normalmente termina con el carácter de Newline, '\ n' (presionando la tecla Intro), correspondiente al código ASCII decimal 10. Hay dos funciones de miembros de GetLine para CIN (o IOSTream). Uno extrae una serie de caracteres consecutivos, comenzando desde el primero. El número de caracteres puede terminar frente al personaje de Newline o pasar el personaje de Newline ('\ n'). Para la otra función de miembro sobrecargado, el programador decide qué personaje debe ser el final de la línea, y se extrae hasta el final de la línea.

Basic_istream & Getline (char_type* s, Streamsize n)

Esta es una función de miembro de CIN. El primer argumento aquí es una matriz creada por el programador. Debería tener al menos n células. N - 1 El carácter se extraerá del búfer y se colocará en la matriz, S. La décima posición en la matriz recibirá el carácter nul, '\ 0'; Y entonces la matriz se convertirá en una cadena. Entonces, la matriz, S debe ser declarada como una matriz de Chars. cinta.getLine () debe codificarse en el programa, donde se espera la entrada de la consola.

El lector debe leer y probar el siguiente programa con la entrada,

AAA BBB CCC DDD EEE

presionando la tecla ENTRAR después, EEE:

#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <char s [14];
cinta.GetLine (s, 14);
para (int i = 0; i <15; i++)
if (s [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es:

AAA BBB CCC D

Se exhibieron trece caracteres. El for-loop en el programa funcionó sin ningún problema. Esto significa que se dio la decimocuarta posición en la matriz, '\ 0'. Si el tamaño de la matriz es más grande que n, la cadena aún se formará, pero tomará un rango más corto.

Basic_istream & GetLine (char_type* s, Streamsize N, Char_type Delim)

Esta función miembro es similar a la anterior. Sin embargo, si los caracteres N-1 ocurren antes del personaje de fin de línea, entonces los caracteres N-1 se enviarán a la matriz, S. Si el carácter de Newline ocurre antes de alcanzar los caracteres N-1, entonces todas las líneas, hasta pero no incluidas, el personaje de Newline se enviará a la matriz. El personaje de NUL, '\ 0' también será enviado a la matriz como el último personaje por el programa. Entonces, la longitud de la matriz debe estimarse, más larga que N o más que la línea completa sin '\ n'.

El tercer argumento, delimitaciones, es ser '\ n'. Se pueden elegir algunos otros personajes para deliminar. En ese caso, la búsqueda puede detenerse antes de '\ n' o pasar '\ n'. Para el siguiente programa, donde la entrada está,

AAA BBB CCC DDD EEE

Se toman todos los caracteres antes de que se presione la tecla ENTER:

#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <char s [25];
cinta.GetLine (s, 25, '\ n');
para (int i = 0; i <25; i++)
if (s [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es,

AAA BBB CCC DDD EEE

como se esperaba.

En el siguiente programa, se envían 20 caracteres al búfer, incluyendo '\ n'. Sin embargo, solo se extraen 12 caracteres del búfer porque el delimitador, delimitaciones es 'D'. La entrada es:

AAA BBB CCC DDD EEE

El programa es:

#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <char s [25];
cinta.GetLine (s, 25, 'd');
para (int i = 0; i <25; i++)
if (s [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es:

AAA BBB CCC

Hay un espacio adicional después de la última 'C', para hacerlo 12 caracteres.

Objeto GetLine () y String

La función getLine () se puede usar para obtener la entrada del teclado y desde el disco de los archivos. Esta sección del artículo trata de obtener información del teclado al programa a través del objeto CIN. Obtener información de un archivo al programa no se discute en este artículo. La biblioteca de cadenas tiene cuatro funciones sobrecargadas para getLine (), emparejado. Estas cuatro funciones son funciones de la biblioteca y no las funciones de los miembros de la clase de cadena.

Basic_istream & GetLine (Basic_istream & Is, Basic_String & Str)

Esta función de biblioteca de cadenas es similar a la función GetLine, sin el delimitador, delimas discutidas anteriormente. Sin embargo, en lugar de enviar caracteres recopilados a una matriz, los caracteres se envían a un objeto de cadena, STR, instanciado desde la clase de cadena. El argumento "es" de esta función puede ser Cin. La longitud de los argumentos, "es" y STR no se estiman ni se predeterminan. Esta función miembro también difiere del correspondiente anterior, ya que recolecta una línea completa del búfer, con CIN, sin el carácter de Newline utilizado en la función. La biblioteca de cadenas debe incluirse en el programa. El siguiente programa ilustra su uso con la entrada del teclado,

AAA BBB CCC DDD EEE

Presione la tecla ENTER después de escribir, EEE. El programa es:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <cuerda str;
GetLine (CIN, STR);
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es:

AAA BBB CCC DDD EEE

como se esperaba. El número total de caracteres del teclado es 19, excluyendo '\ n'. La salida es correcta porque el circuito de la bucle se iteró 25 veces.

Basic_istream & GetLine (Basic_istream && is, Basic_String & Str)

Esta función es similar a la anterior, pero enfatiza en el movimiento.

Basic_istream & GetLine (Basic_istream & Is, Basic_String & Str, delimitación de gráficos)

Esta función de biblioteca de cadenas, que no es una función de miembro de clase de cadena, es similar a la función anterior pero con un delimitador. Sin embargo, todos los personajes que ocurren antes del personaje de fin de línea se enviarán al segundo argumento, STR. El final de la línea en el búfer se indica mediante el tercer carácter de argumento, delimitación. Delim debe ser '\ n'. Sin embargo, el programador puede decidir sobre cualquier otro personaje para el final de la línea.

Para el siguiente programa, donde la entrada está,

AAA BBB CCC DDD EEE

Se toman todos los caracteres antes de que se presione la tecla ENTER. La clave Enter da como resultado en '\ n'.

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <cuerda str;
GetLine (CIN, Str, '\ n');
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es:

AAA BBB CCC DDD EEE

En el siguiente programa con la misma entrada, el deliiter o el carácter de fin de línea es 'D':

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

cout <<"Enter Words:" <cuerda str;
GetLine (CIN, Str, 'D');
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
romper;
cout <
cout <regresar 0;

La salida es:

AAA BBB CCC

Hay un solo carácter espacial después de la última 'C' en la salida.

Basic_istream & Getline (Basic_istream && is, Basic_String & Str, delimitación de gráficos)

Esta función es similar a la anterior, pero enfatiza en el movimiento.

Conclusión

La función GetLine se usa para la entrada. La entrada puede provenir del teclado o de un archivo. Los datos de entrada vienen como una secuencia de caracteres en un búfer en la memoria. El programador puede codificar la función getLine () para obtener los datos cuando entran en la unidad del sistema (búfer de memoria). Cin corresponde al búfer. GetLine () obtiene los datos en trozos, un fragmento por escaneo. Un Chuck puede ser un número determinado de caracteres o cualquier número de caracteres, pero delimitado por el personaje de fin de línea.

Las bibliotecas iostream, la cadena y las fstream tienen la función getLine (). Con la biblioteca iOStream, getLine () es una función miembro del objeto CIN (sobrecargado). Con la biblioteca de cadenas, GetLine () es solo una función en la biblioteca (sobrecargado); no es una función miembro de la clase de cadena. De hecho, CIN es en realidad un argumento de la función getLine () de la biblioteca de cadenas. En cuanto a la función getLine () en la biblioteca fstream, eso es discusión, durante otro tiempo.