Namespaces
Variants

std::getline

Von de.cppreference.net
 
 
 
std::basic_string
 
Definiert in Header <string>
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>& input,
             std::basic_string<CharT, Traits, Allocator>& str, CharT delim );
(1)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>&& input,
             std::basic_string<CharT, Traits, Allocator>& str, CharT delim );
(2) (seit C++11)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>& input,
             std::basic_string<CharT, Traits, Allocator>& str );
(3)
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
    getline( std::basic_istream<CharT, Traits>&& input,
             std::basic_string<CharT, Traits, Allocator>& str );
(4) (seit C++11)

getlineliest Zeichen aus einem Eingabestrom und fügt sie in eine Zeichenkette ein:

1,2) Verhält sich wie Unformatierteingabefunktion, außer dass input.gcount() nicht beeinflusst wird. Nachdem das sentry-Objekt erstellt und geprüft wurde, wird Folgendes ausgeführt:
1) Ruft str.erase().
auf Extrahiert Zeichen aus input und hängt sie an str an, bis eines der folgenden Ereignisse eintritt (in der angegebenen Reihenfolge geprüft):
a) Dateiende-Bedingung auf input, in diesem Fall setzt getline eofbit.
b) Das nächste verfügbare Eingabezeichen ist delim, wie durch Traits::eq(c, delim) getestet, in diesem Fall wird das Trennzeichen aus input extrahiert, aber nicht an str angehängt.
c) str.max_size() Zeichen wurden gespeichert, in diesem Fall setzt getline failbit und kehrt zurück.
3) Wenn aus irgendeinem Grund keine Zeichen extrahiert wurden (nicht einmal das verworfene Trennzeichen), setzt getline failbit und kehrt zurück.
3,4) Gleich wie getline(input, str, input.widen('\n')), d.h. das Standardtrennzeichen ist das Zeilenumbruchzeichen.

Parameter

input - der Stream, von dem Daten gelesen werden
str - die Zeichenkette, in die Daten geschrieben werden
delim - das Trennzeichen

Rückgabewert

input

Hinweise

Beim Einlesen von durch Leerzeichen getrennten Eingaben (z.B. int n ; std:: cin >> n ; ) wird jedes nachfolgende Leerzeichen, einschließlich eines Zeilenumbruchzeichens, im Eingabestrom verbleiben. Beim Wechsel zu zeilenorientierter Eingabe wird dann die erste mit getline abgerufene Zeile genau dieses Leerzeichen sein. Für den wahrscheinlichen Fall, dass dieses Verhalten unerwünscht ist, gehören zu den möglichen Lösungsansätzen:

Beispiel

Das folgende Beispiel demonstriert, wie die getline Funktion verwendet wird, um Benutzereingaben zu lesen, und um einen Stream zeilenweise oder in Teilen einer Zeile unter Verwendung des delim Parameters zu verarbeiten.

#include <iostream>
#include <sstream>
#include <string>
int main()
{
    // greet the user
    std::string name;
    std::cout << "What is your name? ";
    std::getline(std::cin, name);
    std::cout << "Hello " << name << ", nice to meet you.\n";
    // read file line by line
    std::istringstream input;
    input.str("1\n2\n3\n4\n5\n6\n7\n");
    int sum = 0;
    for (std::string line; std::getline(input, line);)
        sum += std::stoi(line);
    std::cout << "\nThe sum is " << sum << ".\n\n";
    // use separator to read parts of the line
    std::istringstream input2;
    input2.str("a;b;c;d");
    for (std::string line; std::getline(input2, line, ';');)
        std::cout << line << '\n';
}

Mögliche Ausgabe:

What is your name? John Q. Public
Hello John Q. Public, nice to meet you.
The sum is 28.
a
b
c
d

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 91 C++98 getline verhielt sich nicht wie eine unformatierte Eingabefunktion verhält sich wie eine unformatierte Eingabefunktion

Siehe auch

extrahiert Zeichen bis zum Auffinden des angegebenen Zeichens
(öffentliche Elementfunktion von std::basic_istream<CharT,Traits> )