Delimitoren für operator>>



  • Hallo
    Was sind laut Standard die Delimitoren für den Operator:

    std::istream& std::operator>> (std::istream&, std::string&);
    

    Und wie Verhalten sie sich im Bezug auf std::istream.ios_base::skipws ?

    MfG, EOutOfResources



  • EOutOfResources schrieb:

    Hallo
    Was sind laut Standard die Delimitoren für den Operator:

    std::istream& std::operator>> (std::istream&, std::string&);
    

    Afaik alles, was vom verwendeten Locale als Whitespace eingestuft wird.

    Und wie Verhalten sie sich im Bezug auf std::istream.ios_base::skipws ?

    Da bin ich mir nicht so sicher (und ein Schnelltest per Ideone brachte auch kein klares Ergebnis).



  • 😃
    Die Frage ist nicht wirklich ernst gemeint oder?



  • CStoll schrieb:

    Afaik alles, was vom verwendeten Locale als Whitespace eingestuft wird.

    Ok.

    CStoll schrieb:

    Da bin ich mir nicht so sicher (und ein Schnelltest per Ideone brachte auch kein klares Ergebnis).

    Schade. Ich hätte ein eindeutiges Ergebnis erwartet. Ich werde mal in den WD gucken.

    sehr_lustig schrieb:

    Die Frage ist nicht wirklich ernst gemeint oder?

    Doch...



  • CStoll schrieb:

    EOutOfResources schrieb:

    Hallo
    Was sind laut Standard die Delimitoren für den Operator:

    std::istream& std::operator>> (std::istream&, std::string&);
    

    Afaik alles, was vom verwendeten Locale als Whitespace eingestuft wird.

    genau so ist es.

    EOutOfResources schrieb:

    Und wie Verhalten sie sich im Bezug auf std::istream.ios_base::skipws ?

    skipws ist per default am istream eingestellt. Das heißt: führende White Space Character werden überlesen. Das Lesen eines string beginnt erst mit dem ersten nicht WS-Character. Mit noskipws werden führende WS-Character nicht mehr überlesen, aber auch nicht eingelesen. Zeigt der Lesezeiger auf ein WS-Character, so wird bei 'noskipws' ein Leerstring gelesen, da dieses Zeichen bereits als 'Delimiter' interpretiert wird.

    C++Standard 21.3.7.9 schrieb:

    Inserters and extractors

    template<class charT, class traits, class Allocator>
    basic_istream<charT,traits>&
    operator>>(basic_istream<charT,traits>& is,
    basic_string<charT,traits,Allocator>& str);
    

    1 Effects: Begins by constructing a sentry object k as if k were constructed by typename
    basic_istream<charT,traits>::sentry k(is). If bool(k) is true, it calls
    str.erase() and then extracts characters from is and appends them to str as if by calling
    str.append(1,c). If is.width() is greater than zero, the maximum number n of characters
    appended is is.width(); otherwise n is str.max_size(). Characters are extracted and
    appended until any of the following occurs:
    — n characters are stored;
    — end-of-file occurs on the input sequence;
    — isspace(c,is.getloc()) is true for the next available input character c.
    2 After the last character (if any) is extracted, is.width(0) is called and the sentry object k is
    destroyed.

    Bem.:

    basic_istream<charT,traits>::sentry k(is)
    

    überliest die führenden WS-Character bei 'skipws' Einstellung.

    Gruß
    Werner



  • Danke vielmals Werner 👍 .


Anmelden zum Antworten