Hvordan fungerer getline i C++?

Hvordan fungerer getline i C++?
C ++ har mange biblioteker i sitt generelle standardbibliotek. Tre av bibliotekene som er involvert i Getline er IOSTREAM -biblioteket, String Library og Fstream -biblioteket. Iostream -biblioteket brukes vanligvis til inngang fra tastaturet og utgangen til konsollen (terminal). Strengbiblioteket gjør det mulig for C ++ -programmet å ha en streng i form av en datastruktur, slik at hvert tegn er i et element, og tegnene kan nås av iteratorer og med indekser. Fstream -biblioteket er for inngang og utdata til filer i disken.

Getline er en medlemsfunksjon for hvert av disse tre bibliotekene. getline er en inngangsfunksjon. Data forlater tastaturet eller filen, inn i programmet i minnet, som en byte -sekvens. I vest -europeiske datasystemer er en karakter en byte. Karakterens sekvens kommer først i et minneområde som kalles bufferen. Fra bufferen er de enten kopiert eller fjernet en for en, inn i programmet som kjører.

getline () er en av funksjonene for å trekke ut karakterene fra bufferen i minnet inn i programmet, som også er i minnet. Alt som legger inn. Så getLine () omhandler og ikke gir ut og ikke ut. Ekstraksjon betyr at karakterene blir fjernet fra bufferen inn i programmet; De er ikke kopiert. Karakterene blir trukket ut når de ankommer. Ideen med getline er at getline trekker ut en hel linje fra bufferen inn i programmet.

Denne artikkelen omhandler getline () for iostream- og strengbibliotekene. getline () for filer, blir normalt diskutert med fstream, og så fstre med sin getline () -funksjon, vil ikke bli diskutert her.

Artikkelinnhold

  • getline () og cin
  • getline () og strengobjekt
  • Konklusjon

getline () og cin

Cout og CIN er to objekter i Iostream -klassen som allerede har blitt instantiert og til stede på biblioteket. Når iostream -klassen er inkludert i C ++ -programmet, kan disse objektene brukes med en gang, uten instantiering (eller erklæring). Cout er for å sende en tekst til terminalen, og CIN er for å motta en tekst fra tastaturet.

Mens brukeren skriver på tastaturet, gjentas tegnene på terminalen i tillegg til å gå inn i en buffer i minnet. Når det skjer, venter CIN. Så snart brukeren trykker på Enter -tasten, ville CIN for programmet ta så mange ord som det ble kodet å ta fra bufferen. Da brukeren trykket på Enter -tasten, var det en linje. Hvis CIN ble kodet med sin Getline () medlemsfunksjon, ville CIN ta hele linjen inn i programmet.

En linje ender normalt med Newline -tegn, '\ n' (trykker på Enter -tasten), tilsvarende desimal ASCII -kode 10. Det er to Getline -medlemsfunksjoner for CIN (eller IOSTREAM). One trekker ut en rekke påfølgende karakterer, som begynner fra den første. Antall tegn kan ende foran Newline -karakteren eller gå forbi Newline -karakteren ('\ n'). For den andre overbelastede medlemsfunksjonen bestemmer programmereren hvilken karakter end-of-line skal være, og den trekker seg ut til eller like før slutten av linjen.

Basic_istream & getline (Char_Type* S, StreamSize N)

Dette er en CIN -medlemsfunksjon. Det første argumentet her er en matrise laget av programmereren. Det skal ha minst N -celler. N - 1 tegn vil bli trukket ut fra bufferen og plassert i matrisen, S. Den første posisjonen i matrisen vil motta NUL -karakteren, '\ 0'; Og slik vil matrisen bli en streng. Så matrisen, S må erklæres som en matrise-av-chars. cin.getline () bør kodes i programmet, der det forventes innspill fra konsollen.

Leseren skal lese og teste følgende program med inngangen,

AAA BBB CCC DDD EEE

Trykk på Enter -tasten etter, EEE:

#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <char s [14];
cin.getline (s, 14);
for (int i = 0; i <15; i++)
if (s [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er:

AAA BBB CCC D

Tretten tegn ble vist. For-loopen i programmet fungerte uten problemer. Dette betyr at den fjortende posisjonen i matrisen ble gitt, '\ 0'. Hvis størrelsen på matrisen er større enn n, vil strengen fortsatt bli dannet, men den vil ta et kortere område.

Basic_istream & getline (Char_Type* S, StreamSize N, Char_Type Delim)

Denne medlemsfunksjonen ligner på ovennevnte. Imidlertid, hvis n-1-tegn oppstår før end-of-line-karakteren, vil n-1-tegn bli sendt til matrisen, s. Hvis Newline-tegnet oppstår før N-1-tegnene er nådd, vil alle linjene, opp til, men ikke inkludert, bli sendt til matrisen til matrisen. NUL -karakteren, '\ 0' vil også bli sendt til matrisen som den siste karakteren av programmet. Så array -lengden bør estimeres, lengre enn n eller lengre enn hele linjen uten '\ n'.

Det tredje argumentet, Delim, er å være '\ n'. Noen andre karakterer kan velges for Delim. I så fall kan søket stoppe før '\ n' eller gå forbi '\ n'. For følgende program, der inngangen er,

AAA BBB CCC DDD EEE

Alle tegnene før enter -tasten blir trykket på blir tatt:

#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <char s [25];
cin.getline (s, 25, '\ n');
for (int i = 0; i <25; i++)
if (s [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er,

AAA BBB CCC DDD EEE

som forventet.

I det følgende programmet blir 20 tegn sendt til bufferen, inkludert '\ n'. Imidlertid er bare 12 tegn trukket ut fra bufferen fordi avgrenseren, Delim er 'D'. Innspillet er:

AAA BBB CCC DDD EEE

Programmet er:

#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <char s [25];
cin.getline (s, 25, 'd');
for (int i = 0; i <25; i++)
if (s [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er:

AAA BBB CCC

Det er en ekstra plass etter siste 'C', for å gjøre det 12 tegn.

getline () og strengobjekt

Getline () -funksjonen kan brukes til å få inndata fra tastaturet og fra filen til filer. Denne delen av artikkelen tar for seg å få innspill fra tastaturet i programmet gjennom CIN -objektet. Å få innspill fra en fil til programmet er ikke diskutert i denne artikkelen. Strengbiblioteket har fire overbelastede funksjoner for getline (), sammenkoblet. Disse fire funksjonene er funksjonene til biblioteket og ikke medlemsfunksjonene til strengklassen.

Basic_istream & getline (Basic_istream & IS, Basic_String & Str)

Denne strengbibliotekfunksjonen ligner på GetLine -funksjonen, uten avgrenseren, Delim diskutert ovenfor. I stedet for å sende tegn samlet til en matrise, blir karakterene imidlertid sendt til et strengobjekt, STR, instantiert fra strengklassen. "Er" -argumentet til denne funksjonen kan være cin. Lengdene på argumentene, “er” og STR er ikke estimert eller forhåndsbestemt. Denne medlemsfunksjonen skiller seg også fra den tilsvarende ovenfor ved at den samler en hel linje fra bufferen, med CIN, uten Newline -tegnet som brukes i funksjonen. Strengbiblioteket må inkluderes i programmet. Følgende program illustrerer bruken med tastaturinngangen,

AAA BBB CCC DDD EEE

Trykk på Enter -tasten etter å ha skrevet, eee. Programmet er:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <streng str;
getline (cin, str);
for (int i = 0; i <25; i++)
if (str [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er:

AAA BBB CCC DDD EEE

som forventet. Det totale antallet tegn fra tastaturet er 19, unntatt '\ n'. Utgangen er riktig fordi for-loopen itereres 25 ganger.

Basic_istream & getline (Basic_istream && er, Basic_String & Str)

Denne funksjonen ligner på det ovennevnte, men legger vekt på å flytte.

Basic_istream & getline (Basic_istream & IS, Basic_String & Str, Chart Delim)

Denne strengbibliotekfunksjonen, som ikke er en strengklassefunksjon, ligner ovennevnte funksjon, men med en avgrensning. Imidlertid vil alle karakterer som oppstår før end-of-line-karakteren bli sendt til det andre argumentet, STR. Avslutningen i bufferen er indikert med det tredje argumentasjonskarakteren, Delim. Delim skal være '\ n'. Programmereren kan imidlertid bestemme for enhver annen karakter for slutten av linjen.

For følgende program, der inngangen er,

AAA BBB CCC DDD EEE

Alle tegnene før enter -tasten blir trykket på blir tatt. Enter -nøkkelen resulterer i '\ n'.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <streng str;
getline (cin, str, '\ n');
for (int i = 0; i <25; i++)
if (str [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er:

AAA BBB CCC DDD EEE

I det følgende programmet med samme innspill er delikatøren eller end-of-line-karakteren 'D':

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

cout <<"Enter Words:" <streng str;
getline (cin, str, 'd');
for (int i = 0; i <25; i++)
if (str [i] == '\ 0')
gå i stykker;
cout <
cout <retur 0;

Utgangen er:

AAA BBB CCC

Det er en enkelt romkarakter etter den siste 'C' i utgangen.

Basic_istream & getline (Basic_istream && er, Basic_String & Str, Chart Delim)

Denne funksjonen ligner på det ovennevnte, men legger vekt på å flytte.

Konklusjon

GetLine -funksjonen brukes til input. Inngang kan komme fra tastaturet eller fra en fil. Inngangsdata kommer som en sekvens av tegn til en buffer i minnet. Programmereren kan kode getline () -funksjonen for å få dataene når de kommer inn i systemenheten (minnebuffer). CIN tilsvarer bufferen. getline () får dataene i biter, en del per skanning. En chuck kan være et gitt antall tegn eller et hvilket som helst antall tegn, men avgrenset av end-of-line-karakteren.

Iostream, strengen og Fstream -bibliotekene har alle Getline () -funksjonen. Med Iostream -biblioteket er Getline () en medlemsfunksjon av CIN -objektet (overbelastet). Med strengbiblioteket er Getline () bare en funksjon i biblioteket (overbelastet); Det er ikke en medlemsfunksjon i strengklassen. Faktisk er CIN faktisk et argument for getline () -funksjonen til strengbiblioteket. Når det gjelder getline () -funksjonen i Fstream -biblioteket, er det diskusjonen, for en annen gang.