Como o GetLine funciona em C++?

Como o GetLine funciona em C++?
C ++ tem muitas bibliotecas em sua biblioteca padrão geral. Três das bibliotecas envolvidas com GetLine são a biblioteca iostream, a biblioteca de cordas e a biblioteca FStream. A biblioteca iostream é normalmente usada para entrada do teclado e saída para o console (terminal). A biblioteca de string permite que o programa C ++ tenha uma string na forma de uma estrutura de dados, de modo que cada personagem esteja em um elemento e os caracteres possam ser acessados ​​por iteradores e com índices. A biblioteca FStream é para entrada e saída para arquivos no disco.

GetLine é uma função de membro para cada uma dessas três bibliotecas. getLine é uma função de entrada. Os dados deixam o teclado ou o arquivo, no programa na memória, como uma sequência de bytes. Nos sistemas de computadores da Europa Ocidental, um personagem é um byte. A sequência de caracteres chega primeiro a uma área de memória chamada buffer. Do buffer, eles são copiados ou removidos um por um, para o programa que está em execução.

getLine () é uma das funções para extrair os personagens do buffer na memória para o programa, que também está na memória. Tudo o que está inserindo. Então, getLine () lida com imputamento e não saída. Extração significa que os caracteres são removidos do buffer para o programa; Eles não são copiados. Os personagens são extraídos quando chegam. A idéia de getLine é que GetLine extrai uma linha inteira do buffer para o programa.

Este artigo lida com getLine () para as bibliotecas iostream e string. getLine () para arquivos, normalmente é discutido com o FStream e, portanto, Fream com sua função getLine (), não será discutido aqui.

Conteúdo do artigo

  • getLine () e CIN
  • objeto getLine () e string
  • Conclusão

getLine () e CIN

Cout e CIN são dois objetos da classe iostream que já foram instanciados e presentes na biblioteca. Depois que a classe iostream for incluída no programa C ++, esses objetos podem ser usados ​​imediatamente, sem instanciação (ou declaração). Cout é para enviar um texto para o terminal, e o CIN é para receber um texto do teclado.

Como o usuário está digitando no teclado, os personagens são ecoados no terminal, além de entrar em um buffer na memória. Como isso está acontecendo, Cin está esperando. Assim que o usuário pressionar a tecla Enter, o CIN do programa levaria tantas palavras quanto codificadas para tirar do buffer. Quando o usuário pressionou a tecla Enter, essa era uma linha. Se a CIN fosse codificada com sua função de membro getLine (), a CIN levaria toda a linha para o programa.

Uma linha normalmente termina com o personagem Newline, '\ n' (pressionando a tecla Enter), correspondendo ao código ASCII decimal 10. Existem duas funções de membro getLine para CIN (ou iostream). Um extrai. O número de caracteres pode terminar em frente ao personagem Newline ou passar pelo personagem Newline ('\ n'). Para a outra função de membro sobrecarregada, o programador decide qual personagem o final da linha deve ser e extrai até ou pouco antes do final da linha.

Basic_istream & getLine (char_type* s, streamsize n)

Esta é uma função de membro do CIN. O primeiro argumento aqui é uma matriz criada pelo programador. Deve ter pelo menos n células. n - 1 caractere será extraído do buffer e colocado na matriz, S. A enésima posição na matriz receberá o caráter nu, '\ 0'; E assim a matriz se tornará uma corda. Então a matriz, S deve ser declarada como uma variedade de cargas. CIN.getLine () deve ser codificado no programa, onde a entrada é esperada do console.

O leitor deve ler e testar o seguinte programa com a entrada,

AAA BBB CCC DDD

Pressionando a tecla Enter depois, EEE:

#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <char S [14];
CIN.getLine (s, 14);
para (int i = 0; i <15; i++)
if (s [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é:

AAA BBB CCC D

Treze caracteres foram exibidos. O loop for do programa funcionou sem nenhum problema. Isso significa que a décima quarta posição na matriz foi dada, '\ 0'. Se o tamanho da matriz for maior que n, a corda ainda será formada, mas será necessário um alcance mais curto.

Basic_istream & getLine (char_type* s, streamsize n, char_type delim)

Esta função de membro é semelhante ao acima. No entanto, se os caracteres N-1 ocorrerem antes do caráter de fim de linha, os caracteres N-1 serão enviados para a matriz, S. Se o personagem newline ocorrer antes que os caracteres N-1 sejam alcançados, todas as linhas, mas não incluídas, o personagem de nova linha será enviado para a matriz. O personagem NUL, '\ 0' também será enviado para a matriz como o último personagem pelo programa. Portanto, o comprimento da matriz deve ser estimado, mais que n ou mais que a linha completa sem '\ n'.

O terceiro argumento, Delim, deve ser '\ n'. Alguns outros personagens podem ser escolhidos para delim. Nesse caso, a pesquisa pode parar antes de '\ n' ou passar '\ n'. Para o programa a seguir, onde a entrada é,

AAA BBB CCC DDD

Todos os caracteres antes que a tecla enter seja pressionada:

#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <char S [25];
CIN.getLine (s, 25, '\ n');
para (int i = 0; i <25; i++)
if (s [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é,

AAA BBB CCC DDD

como esperado.

No programa a seguir, 20 caracteres são enviados ao buffer, incluindo '\ n'. No entanto, apenas 12 caracteres são extraídos do buffer porque o delimitador, Delim é 'D'. A entrada é:

AAA BBB CCC DDD

O programa é:

#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <char S [25];
CIN.getLine (S, 25, 'D');
para (int i = 0; i <25; i++)
if (s [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é:

AAA BBB CCC

Há um espaço extra após o último 'C', para fazer 12 caracteres.

objeto getLine () e string

A função getLine () pode ser usada para obter entrada do teclado e do disco de arquivos. Esta seção do artigo trata de obter informações do teclado no programa através do objeto CIN. Obter informações de um arquivo no programa não é discutido neste artigo. A biblioteca de string tem quatro funções sobrecarregadas para getLine (), emparelhado. Essas quatro funções são funções da biblioteca e não funções membros da classe String.

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

Esta função da biblioteca de string é semelhante à função getLine, sem o delimitador, Delim discutido acima. No entanto, em vez de enviar caracteres coletados para uma matriz, os personagens são enviados para um objeto de string, STR, instanciados da classe String. O argumento "IS" desta função pode ser CIN. Os comprimentos dos argumentos, "IS" e STR não são estimados ou predeterminados. Essa função de membro também difere do correspondente acima, pois coleta uma linha inteira do buffer, com CIN, sem o personagem Newline usado na função. A biblioteca de string deve ser incluída no programa. O programa a seguir ilustra seu uso com a entrada do teclado,

AAA BBB CCC DDD

Pressione a tecla Enter após digitar, Eee. O programa é:

#incluir
#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <string str;
getline (cin, str);
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é:

AAA BBB CCC DDD

como esperado. O número total de caracteres do teclado é 19, excluindo '\ n'. A saída está correta porque o loop for iterado 25 vezes.

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

Esta função é semelhante ao acima, mas enfatiza a mudança.

Basic_istream & getLine (Basic_istream & IS, Basic_String & Str, Delim do gráfico)

Esta função da biblioteca de string, que não é uma função de membro da classe de string, é semelhante à função acima, mas com um delimitador. No entanto, todos os personagens que ocorrem antes que o personagem de final de linha seja enviado para o segundo argumento, STR. O final da linha no buffer é indicado pelo terceiro caráter de argumento, Delim. Delim deve ser '\ n'. No entanto, o programador pode decidir sobre qualquer outro personagem para o fim da linha.

Para o programa a seguir, onde a entrada é,

AAA BBB CCC DDD

Todos os caracteres antes que a tecla Enter seja pressionada. A chave inserir resulta em '\ n'.

#incluir
#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <string str;
getLine (cin, str, '\ n');
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é:

AAA BBB CCC DDD

No programa a seguir com a mesma entrada, o delicatiter ou o personagem de final da linha é 'D':

#incluir
#incluir
usando namespace std;
int main ()

cout <<"Enter Words:" <string str;
getLine (cin, str, 'd');
para (int i = 0; i <25; i++)
if (str [i] == '\ 0')
quebrar;
cout <
cout <retornar 0;

A saída é:

AAA BBB CCC

Há um único personagem espacial após o último 'C' na saída.

Basic_istream & getLine (Basic_istream && Is, Basic_String & Str, Delim do gráfico)

Esta função é semelhante ao acima, mas enfatiza a mudança.

Conclusão

A função getLine é usada para entrada. A entrada pode vir do teclado ou de um arquivo. Os dados de entrada são como uma sequência de caracteres em um buffer na memória. O programador pode codificar a função getLine () para obter os dados quando entrar na unidade do sistema (buffer de memória). CIN corresponde ao buffer. getLine () obtém os dados em pedaços, um pedaço por varredura. Um mandril pode ser um determinado número de caracteres ou qualquer número de caracteres, mas delimitado pelo personagem de final de linha.

O iostream, a string e as bibliotecas FStream têm a função getLine (). Com a biblioteca iostream, GetLine () é uma função de membro do objeto CIN (sobrecarregado). Com a biblioteca de string, getLine () é apenas uma função na biblioteca (sobrecarregada); Não é uma função de membro da classe String. De fato, Cin é na verdade um argumento da função getLine () da biblioteca de strings. Quanto à função getLine () na biblioteca FStream, isso é discussão, para algum outro momento.