Come funziona GetLine in C++?

Come funziona GetLine in C++?
C ++ ha molte librerie nella sua libreria standard generale. Tre delle biblioteche coinvolte con GetLine sono la libreria iostream, la libreria di stringhe e la libreria FStream. La libreria iostream viene generalmente utilizzata per l'input dalla tastiera e l'uscita alla console (terminale). La libreria di stringhe consente al programma C ++ di avere una stringa sotto forma di una struttura di dati, in modo che ogni carattere sia in un elemento e che i caratteri possano essere accessibili dagli iteratori e con indici. La libreria FStream è per l'input e l'output ai file nel disco.

getline è una funzione membro per ciascuna di queste tre librerie. getline è una funzione di input. I dati lasciano la tastiera o il file, nel programma in memoria, come sequenza di byte. Nei sistemi informatici dell'Europa occidentale, un personaggio è un byte. La sequenza di caratteri arriva prima in un'area di memoria chiamata buffer. Dal buffer, vengono copiati o rimossi uno per uno, nel programma in esecuzione.

getline () è una delle funzioni per estrarre i caratteri dal buffer in memoria nel programma, che è anche in memoria. Tutto ciò che sta entrando. Quindi, getline () si occupa dell'imputazione e non dell'uscita. Estrazione significa che i caratteri vengono rimossi dal buffer nel programma; non sono copiati. I personaggi vengono estratti quando arrivano. L'idea di getline è che getline estrae un'intera linea dal buffer nel programma.

Questo articolo si occupa di getline () per le librerie iostream e stringa. getline () per i file, è normalmente discusso con FStream e quindi FStream con la sua funzione getline () non sarà discusso qui.

Contenuto dell'articolo

  • getline () e CIN
  • getline () e oggetto stringa
  • Conclusione

getline () e CIN

COUT e CIN sono due oggetti della classe iostream che è già stata istanziata e presente nella biblioteca. Una volta inclusa la classe iostream nel programma C ++, questi oggetti possono essere usati immediatamente, senza istanziazione (o dichiarazione). Cout è per l'invio di un testo al terminale e CIN è per ricevere un testo dalla tastiera.

Dato che l'utente sta digitando sulla tastiera, i caratteri vengono echeggiati sul terminale e vanno in un buffer in memoria. Mentre ciò sta accadendo, CIN sta aspettando. Non appena l'utente preme il tasto ENTER, CIN per il programma avrebbe preso tutte le parole che veniva codificata da prendere dal buffer. Quando l'utente ha premuto il tasto Invio, quella era una riga. Se CIN fosse codificato con la sua funzione membro getline (), allora CIN avrebbe portato l'intera linea nel programma.

Una riga normalmente termina con il carattere di Newline, '\ n' (premendo il tasto Invio), corrispondente al codice ASCII decimale 10. Ci sono due funzioni dei membri Getline per CIN (o iostream). Uno estrae un numero di caratteri consecutivi, a partire dal primo. Il numero di caratteri può finire davanti al carattere di Newline o superare il carattere di Newline ('\ n'). Per l'altra funzione del membro sovraccarico, il programmatore decide quale carattere dovrebbe essere la fine della linea e si estrae fino a o poco prima della fine della linea.

base_istream & getline (char_type* s, stream -size n)

Questa è una funzione membro CIN. Il primo argomento qui è un array creato dal programmatore. Dovrebbe avere almeno n cellule. N - 1 carattere verrà estratto dal tampone e posizionato nell'array, s. L'ennesima posizione nell'array riceverà il carattere NUL, '\ 0'; E così l'array diventerà una stringa. Quindi l'array, S deve essere dichiarato come una matrice. Cin.getline () dovrebbe essere codificato nel programma, dove è previsto l'input dalla console.

Il lettore dovrebbe leggere e testare il seguente programma con l'input,

AAA BBB CCC DDD EEE

Premendo il tasto Invio dopo, EEE:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <Char S [14];
Cin.getline (s, 14);
per (int i = 0; i <15; i++)
if (s [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è:

AAA BBB CCC D

Sono stati visualizzati tredici caratteri. Il per loop nel programma ha funzionato senza alcun problema. Ciò significa che è stata data la quattordicesima posizione nell'array, '\ 0'. Se la dimensione dell'array è maggiore di N, la stringa sarà comunque formata, ma ci vorrà una gamma più breve.

base_istream & getline (char_type* s, streamsize n, char_type delim)

Questa funzione membro è simile a quanto sopra. Tuttavia, se i caratteri N-1 si verificano prima del carattere di fine linea, i caratteri N-1 verranno inviati all'array, s. Se il personaggio di Newline si verifica prima che vengano raggiunti i caratteri N-1, allora tutte le linee, ma non incluse, il personaggio di Newline verrà inviato all'array. Il personaggio NUL, '\ 0' verrà anche inviato all'array come ultimo personaggio dal programma. Quindi, la lunghezza dell'array dovrebbe essere stimata, più lunga di n o più lunga della linea completa senza '\ n'.

Il terzo argomento, delim, deve essere '\ n'. Alcuni altri personaggi possono essere scelti per Delim. In tal caso, la ricerca può fermarsi prima di '\ n' o andare oltre '\ n'. Per il seguente programma, dove si trova l'input,

AAA BBB CCC DDD EEE

Vengono presi tutti i caratteri prima del tasto ENTER

#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <Char S [25];
Cin.getline (s, 25, '\ n');
per (int i = 0; i <25; i++)
if (s [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è,

AAA BBB CCC DDD EEE

come previsto.

Nel seguente programma, 20 caratteri vengono inviati al buffer, tra cui '\ n'. Tuttavia, solo 12 caratteri vengono estratti dal buffer perché il delimitatore, Delim è "D". L'ingresso è:

AAA BBB CCC DDD EEE

Il programma è:

#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <Char S [25];
Cin.getline (s, 25, 'd');
per (int i = 0; i <25; i++)
if (s [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è:

AAA BBB CCC

C'è uno spazio extra dopo l'ultimo "C", per renderlo 12 caratteri.

getline () e oggetto stringa

La funzione getline () può essere utilizzata per ottenere l'input dalla tastiera e dal disco dei file. Questa sezione dell'articolo si occupa di ottenere input dalla tastiera nel programma tramite l'oggetto CIN. Ottenere input da un file nel programma non è discusso in questo articolo. La libreria String ha quattro funzioni sovraccarichi per getline (), abbinate. Queste quattro funzioni sono funzioni della libreria e non le funzioni membri della classe stringa.

base_istream & getline (base_istream & is, basic_string e str)

Questa funzione della libreria stringa è simile alla funzione getline, senza il delimitatore, Delim discusso sopra. Tuttavia, invece di inviare caratteri raccolti in un array, i caratteri vengono inviati a un oggetto stringa, STR, istanziato dalla classe stringa. L'argomento "è" di questa funzione può essere CIN. Le lunghezze degli argomenti, "Is" e STR non sono stimati o predeterminati. Questa funzione membro differisce anche da quella corrispondente sopra in quanto raccoglie un'intera linea dal buffer, con CIN, senza il carattere di nuova linea utilizzato nella funzione. La libreria String deve essere inclusa nel programma. Il seguente programma ne illustra l'uso con l'input della tastiera,

AAA BBB CCC DDD EEE

Premere il tasto Invio dopo la digitazione, EEE. Il programma è:

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <String STR;
getline (CIN, STR);
per (int i = 0; i <25; i++)
if (str [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è:

AAA BBB CCC DDD EEE

come previsto. Il numero totale di caratteri dalla tastiera è 19, escluso '\ n'. L'output è corretto perché il per loop è stato iterato 25 volte.

base_istream & getline (basic_istream && is, base_string e str)

Questa funzione è simile a quanto sopra, ma sottolinea il trasloco.

base_istream & getline (base_istream & is, base_string & STR, grafico Delim)

Questa funzione della libreria stringa, che non è una funzione membro della classe stringa, è simile alla funzione sopra ma con un delimitatore. Tuttavia, tutti i personaggi che si verificano prima del carattere di fine linea verranno inviati alla seconda discussione, STR. La fine della linea nel buffer è indicata dal terzo personaggio dell'argomento, Delim. delim dovrebbe essere '\ n'. Tuttavia, il programmatore può decidere su qualsiasi altro personaggio per la fine della linea.

Per il seguente programma, dove si trova l'input,

AAA BBB CCC DDD EEE

Vengono presi tutti i caratteri prima del tasto ENTER. Il tasto ENTER risulta in '\ n'.

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <String STR;
getline (cin, str, '\ n');
per (int i = 0; i <25; i++)
if (str [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è:

AAA BBB CCC DDD EEE

Nel seguente programma con lo stesso input, il carattere Deliiter o End-of-line è "D":

#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

cout <<"Enter Words:" <String STR;
getline (cin, str, 'd');
per (int i = 0; i <25; i++)
if (str [i] == '\ 0')
rottura;
cout <
cout <restituzione 0;

L'output è:

AAA BBB CCC

C'è un singolo carattere spaziale dopo l'ultimo 'c' nell'output.

base_istream & getline (base_istream && is, base_string & str, grafico delim)

Questa funzione è simile a quanto sopra, ma sottolinea il trasloco.

Conclusione

La funzione getline viene utilizzata per l'input. L'input può provenire dalla tastiera o da un file. I dati di input si presentano come una sequenza di caratteri in un buffer in memoria. Il programmatore può codificare la funzione getline () per ottenere i dati quando entrano nell'unità di sistema (buffer di memoria). CIN corrisponde al buffer. getline () ottiene i dati in blocchi, un pezzo per scansione. Un mandrino può essere un determinato numero di caratteri o un numero qualsiasi di caratteri ma delimitato dal carattere di fine linea.

Iostream, la stringa e le librerie FStream hanno tutte la funzione getline (). Con la libreria iostream, getline () è una funzione membro dell'oggetto CIN (sovraccarico). Con la libreria String, getline () è solo una funzione nella libreria (sovraccarico); non è una funzione membro della classe stringa. In effetti, CIN è in realtà un argomento della funzione getline () della libreria di stringhe. Per quanto riguarda la funzione getline () nella libreria FStream, questa è la discussione, per qualche altra volta.