Wie funktioniert Getline in C++?

Wie funktioniert Getline in C++?
C ++ hat viele Bibliotheken in seiner allgemeinen Standardbibliothek. Drei der mit Getline beteiligten Bibliotheken sind die iStream -Bibliothek, die String -Bibliothek und die Fstream -Bibliothek. Die iOstream -Bibliothek wird normalerweise für die Eingabe von der Tastatur und zur Ausgabe in die Konsole (Terminal) verwendet. Mit der String -Bibliothek können das C ++ - Programm eine Zeichenfolge in Form einer Datenstruktur haben, so dass sich jedes Zeichen in einem Element befindet und auf die Zeichen von Iteratoren und mit Indizes zugegriffen werden können. Die FStream -Bibliothek ist für Eingaben und Ausgabe in Dateien in der Festplatte bestimmt.

Getline ist eine Mitgliedsfunktion für jede dieser drei Bibliotheken. Getline ist eine Eingabefunktion. Die Daten lassen die Tastatur oder Datei als Byte -Sequenz in das Programm im Speicher, als Byte -Sequenz. In westeuropäischen Computersystemen ist ein Charakter ein Byte. Die Reihenfolge der Zeichen kommt zuerst in einem Speicherbereich, der als Puffer bezeichnet wird. Aus dem Puffer werden sie entweder kopiert oder eins von anderen in das Programm, das ausgeführt wird, kopiert oder entfernt.

getline () ist eine der Funktionen, um die Zeichen aus dem Puffer im Speicher in das Programm zu extrahieren, das sich ebenfalls im Speicher befindet. Alles, was eingibt. Getline () befasst sich also mit dem Imputing und nicht mit Ausgabe. Extraktion bedeutet, dass die Zeichen aus dem Puffer in das Programm entfernt werden. Sie werden nicht kopiert. Die Zeichen werden bei der Ankunft extrahiert. Die Idee von GetLine ist, dass Getline eine ganze Linie aus dem Puffer in das Programm extrahiert.

Dieser Artikel befasst sich mit Getline () für die iStream- und String -Bibliotheken. Getline () für Dateien wird normalerweise mit FStream besprochen, und so wird Fstream mit der Funktion "Getline ()) hier nicht besprochen.

Artikelinhalt

  • getline () und cin
  • Getline () und String -Objekt
  • Abschluss

getline () und cin

Cout und CIN sind zwei Objekte der iOstream -Klasse, die bereits instanziiert und in der Bibliothek vorhanden sind. Sobald die iOstream -Klasse in das C ++ - Programm aufgenommen wurde, können diese Objekte sofort ohne Instanziierung (oder Deklaration) verwendet werden. Cout dient zum Senden eines Textes an das Terminal, und CIN ist für den Empfang eines Textes von der Tastatur.

Da der Benutzer auf der Tastatur eingreift, werden die Zeichen am Terminal wiedergegeben und gehen in einen Puffer im Speicher ein. Während das passiert, wartet Cin. Sobald der Benutzer die Eingabetaste drückt, würde CIN für das Programm so viele Wörter nehmen, wie er aus dem Puffer codiert wurde. Als der Benutzer die Eingabetaste drückte, war dies eine Zeile. Wenn CIN mit seiner Mitgliederfunktion von Getline () codiert würde, würde CIN die gesamte Linie in das Programm einnehmen.

Eine Zeile endet normalerweise mit dem Newline -Zeichen, '\ n' (drückt die Eingabetaste), die dem Dezimal -ASCII -Code 10 entspricht. Es gibt zwei Getline -Mitgliedsfunktionen für CIN (oder iOstream). Man extrahiert eine Reihe aufeinanderfolgender Zeichen, beginnend von Anfang an. Die Anzahl der Zeichen kann vor dem Newline -Charakter enden oder am Newline -Charakter vorbeigehen ('\ n'). Für die andere überlastete Mitgliederfunktion entscheidet der Programmierer, welches Zeichen das Ende der Leitung sein sollte, und er extrahiert bis oder kurz vor dem Ende der Leitung.

Basic_istream & getline (char_type* s, streamSize n)

Dies ist eine CIN -Mitgliedsfunktion. Das erste Argument hier ist ein Array, das der Programmierer erstellt hat. Es sollte mindestens N -Zellen haben. N - 1 Zeichen wird aus dem Puffer extrahiert und in das Array platziert, s s. Die n -te Position im Array erhält das NUL -Zeichen '\ 0'; Und so wird das Array eine Zeichenfolge. Das Array muss also als Array-of-Great-Array deklariert werden. CIN.Getline () sollte im Programm codiert werden, wobei Eingaben von der Konsole erwartet werden.

Der Leser sollte das folgende Programm mit der Eingabe lesen und testen,

AAA BBB CCC DDD EEEE

Drücken Sie die Eingabetaste nach, eee:

#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <char s [14];
CIN.Getline (s, 14);
für (int i = 0; i <15; i++)
if (s [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist:

AAA BBB CCC D

Dreizehn Zeichen wurden angezeigt. Die für die Schleife im Programm ohne Probleme funktionierte. Dies bedeutet, dass die vierzehnte Position im Array gegeben wurde, "\ 0". Wenn die Größe des Arrays größer als n ist, wird die Saite weiter gebildet, aber es dauert eine kürzere Reichweite.

Basic_istream & getline (char_type* s, streamSize n, char_type delim)

Diese Mitgliedsfunktion ist ähnlich wie bei der oben genannten. Wenn jedoch N-1-Zeichen vor dem Zeichenende auftreten, werden N-1-Zeichen an das Array gesendet, s s, s s, s S. Wenn das Newline-Zeichen vor dem Erreichen der N-1-Zeichen auftritt, wird alle Zeilen bis zu, aber nicht enthalten, das neue Zeilenzeichen wird an das Array gesendet. Der NUL -Charakter '\ 0' wird auch vom Programm an das Array als das letzte Zeichen gesendet. Die Arraylänge sollte also geschätzt werden, länger als N oder länger als die vollständige Linie ohne '\ n'.

Das dritte Argument, Delim, ist '\ n'. Einige andere Zeichen können für Delim ausgewählt werden. In diesem Fall kann die Suche vor '\ n' oder vorbei '\ n' aufhören. Für das folgende Programm, wo die Eingabe ist,

AAA BBB CCC DDD EEEE

Alle Zeichen, bevor die Eingabetaste gedrückt wird, werden aufgenommen:

#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <Char S [25];
CIN.Getline (s, 25, '\ n');
für (int i = 0; i <25; i++)
if (s [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist,

AAA BBB CCC DDD EEEE

wie erwartet.

Im folgenden Programm werden 20 Zeichen an den Puffer gesendet, einschließlich '\ n'. Es werden jedoch nur 12 Zeichen aus dem Puffer extrahiert, weil der Trennzeichen Delim 'D' ist. Die Eingabe ist:

AAA BBB CCC DDD EEEE

Das Programm ist:

#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <Char S [25];
CIN.Getline (s, 25, 'd');
für (int i = 0; i <25; i++)
if (s [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist:

AAA BBB CCC

Nach dem letzten "C" gibt es einen zusätzlichen Platz, um 12 Zeichen zu machen.

Getline () und String -Objekt

Die Funktion getline () kann verwendet werden, um Eingaben von der Tastatur und der Datenträger der Dateien zu erhalten. In diesem Abschnitt des Artikels geht es darum, Eingaben von der Tastatur in das Programm über das CIN -Objekt zu erhalten. In diesem Artikel wird in diesem Artikel keine Eingaben aus einer Datei in das Programm erörtert. Die String -Bibliothek verfügt über vier überlastete Funktionen für getline (), gepaart. Diese vier Funktionen sind Funktionen der Bibliothek und keine Mitgliedsfunktionen der String -Klasse.

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

Diese String -Bibliotheksfunktion ähnelt der GetLine. Anstatt jedoch Zeichen an ein Array zu senden, werden die Zeichen jedoch an ein String -Objekt gesendet, STR, das aus der String -Klasse instanziiert wurde. Das Argument „IS“ dieser Funktion kann CIN sein. Die Längen der Argumente, „IS“ und STR wird nicht geschätzt oder vorbestimmt. Diese Mitgliedsfunktion unterscheidet sich auch von der entsprechenden oben darin, als sie eine ganze Linie aus dem Puffer mit CIN erfasst, ohne dass der in der Funktion verwendete Newline -Zeichen verwendet wird. Die String -Bibliothek muss in das Programm aufgenommen werden. Das folgende Programm veranschaulicht seine Verwendung mit der Tastatureingabe,

AAA BBB CCC DDD EEEE

Drücken Sie die Eingabetaste nach dem Eingeben, EEE. Das Programm ist:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <String str;
Getline (cin, str);
für (int i = 0; i <25; i++)
if (str [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist:

AAA BBB CCC DDD EEEE

wie erwartet. Die Gesamtzahl der Zeichen aus der Tastatur ist 19, ohne '\ n'. Der Ausgang ist korrekt, weil die für die Schleife 25 Mal iterierte Iterie.

BASIC_ISTREAM & GETLINE (Basic_istream &&, Basic_string & Str)

Diese Funktion ähnelt dem oben genannten, betont aber beim Bewegen.

BASIC_ISTREAM & GETLINE (BASIC_ISTREAM & IS, BASIC_STRING & STR, Diagramm Delim)

Diese Funktion der String -Bibliothek, die keine String -Klassen -Mitgliedsfunktion ist, ähnelt der obigen Funktion, sondern mit einem Trennzeichen. Alle Charaktere, die vor dem Zeilenzeichen auftreten, werden jedoch an das zweite Argument gesendet, STR. Das Zeilenende im Puffer wird durch das dritte Argumentcharakter DEM angezeigt. Delim sollte '\ n' sein. Der Programmierer kann jedoch über einen anderen Charakter für das Ende der Leitung entscheiden.

Für das folgende Programm, wo die Eingabe ist,

AAA BBB CCC DDD EEEE

Alle Zeichen, bevor die Eingabetaste gedrückt wird. Die Eingabetaste führt zu '\ n'.

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <String str;
getline (cin, str, '\ n');
für (int i = 0; i <25; i++)
if (str [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist:

AAA BBB CCC DDD EEEE

Im folgenden Programm mit demselben Eingang lautet der Deliiter- oder das Ende des Line-Zeichens 'D':

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Cout <<"Enter Words:" <String str;
Getline (Cin, Str, 'D');
für (int i = 0; i <25; i++)
if (str [i] == '\ 0')
brechen;
Cout <
Cout <Rückkehr 0;

Die Ausgabe ist:

AAA BBB CCC

Nach dem letzten 'C' im Ausgang gibt es einen einzelnen Raumzeichen.

BASIC_ISTREAM & GETLINE (BASIC_ISTREAM && IS, BASIC_STRING & STR, Diagramm Delim)

Diese Funktion ähnelt dem oben genannten, betont aber beim Bewegen.

Abschluss

Die GetLine -Funktion wird für die Eingabe verwendet. Die Eingabe kann von der Tastatur oder von einer Datei ausgehen. Eingabedaten werden als Abfolge von Zeichen in einen Puffer im Speicher geliefert. Der Programmierer kann die Funktion getline () codieren, um die Daten zu erhalten, wenn sie in die Systemeinheit kommen (Speicherpuffer). CIN entspricht dem Puffer. Getline () Holen Sie sich die Daten in Stücken, einen Stück pro Scan. Ein Chuck kann eine bestimmte Anzahl von Zeichen oder eine beliebige Anzahl von Zeichen sein, aber durch das Ende des Line-Zeichens abgegrenzt.

Die iOstream, die String und die Fstream -Bibliotheken haben alle die Funktion getline (). Mit der iStream -Bibliothek ist Getline () eine Mitgliedsfunktion des CIN -Objekts (überladen). Mit der String -Bibliothek ist Getline () nur eine Funktion in der Bibliothek (überlastet). Es ist keine Mitgliedsfunktion der String -Klasse. In der Tat ist CIN tatsächlich ein Argument der Funktion von Getline () der String -Bibliothek. Die Funktion von GetLine () in der Fstream -Bibliothek, dh Diskussion, für einige andere Zeit.