Sdílet prostřednictvím


getline

Extrahujte řetězce vstupního datového proudu řádek po řádku.

// (1) delimiter as parameter
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>& is,
    basic_string<CharType, Traits, Allocator>& str, CharType delim);

template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>&& is,
    basic_string<CharType, Traits, Allocator>& str, const CharType delim);

// (2) default delimiter used
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>& is,
    basic_string<CharType, Traits, Allocator>& str);

template<class Allocator, class Traits, class Allocator>
basic_istream<Allocator, Traits>& getline(
    basic_istream<Allocator, Traits>&& is,
    basic_string<Allocator, Traits, Allocator>& str);

Parametry

  • is
    Vstupní datový proud, ze kterého má být extrahován řetězec.

  • str
    Řetězec, do nějž jsou načteny znaky ze vstupního datového proudu.

  • delim
    Oddělovač, který řádek.

Vrácená hodnota

Vstupní datový proud is.

Poznámky

Dvojice funkce podpisů označena (1) extrahovány znaky z is dokud delim není nalezen, je v ukládání str.

Dvojice funkce podpisů označena (2) pomocí nového řádku jako oddělovač řádku výchozí a chovají jako getline(is, str, is.widen('\n')).

Funkce second každé dvojice je analogie na první z nich pro podporu odkazy rvalue.

Extrakce zastaví se, když dojde k jedné z následujících akcí:

  • Na konec souboru v takovém případě příznak vnitřní stav is je nastavena na ios_base::eofbit.

  • Poté, co funkce extrahuje element, který porovnává rovná delim, v takovém případě elementu je umístěna zpět ani připojenou k řízené sekvenci.

  • Poté, co funkce extrahuje str.max_size prvky, ve kterém případu příznak vnitřní stav is je nastavena na ios_base::failbit.

  • Některé další chybě, která dříve uvedeny, v takovém případě příznak vnitřní stav is je nastavena na ios_base::badbit

Informace o použití příznaků vnitřní stav naleznete v tématu ios_base::iostate.

Pokud funkce extrahuje žádné elementy, vnitřní stav příznak is je nastavena na ios_base::failbit.V žádném případě getline vrátí is.

Pokud je vyvolána výjimka, is a str jsou ponechána v platném stavu.

Příklad

Následující kód ukazuje getline() ve dvou režimech: nejprve s výchozím oddělovačem (nový řádek) a druhý prázdný znak jako oddělovač.Znak konce souboru (klávesy CTRL + Z na klávesnici) se používá k řízení ukončení klienta při cykly.Nastaví příznak vnitřní stav cin k eofbit, které musí být zrušeno s basic_ios::clear() před druhou při cyklu bude fungovat správně.

// compile with: /EHsc /W4
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string str;
    vector<string> v1;
    cout << "Enter a sentence, press ENTER between sentences. (Ctrl-Z to stop): " << endl;
    // Loop until end-of-file (Ctrl-Z) is input, store each sentence in a vector.
    // Default delimiter is the newline character.
    while (getline(cin, str)) {
        v1.push_back(str);
    }

    cout << "The following input was stored with newline delimiter:" << endl;
    for (const auto& p : v1) {
        cout << p << endl;
    }

    cin.clear();

    vector<string> v2;
    // Now try it with a whitespace delimiter
    while (getline(cin, str, ' ')) {
        v2.push_back(str);
    }

    cout << "The following input was stored with whitespace as delimiter:" << endl;
    for (const auto& p : v2) {
        cout << p << endl;
    }
}

Výstup

                          

Požadavky

Záhlaví: < řetězec >

Obor názvů: směrodatné

Viz také

Referenční dokumentace

basic_string – třída

<string>