Als @Joachim Noten, der Eingang Operator >>
auf weiß-Raum trennt.
Sie können es wie folgt:
string name;
int age;
while (class_details >> name >> age) {
// Use name & age here.
}
class_details >> name
extrahieren ein Wort (non-white-space Zeichen) aus dem Eingangsstrom und speichert sie in der name
Variable und gibt das ursprüngliche Stream-Objekt class_details
. Dies ermöglicht die Eingabe Extraktion Verkettungs ...
(Seit class_details >> name
kehrt class_details
, können wir die >>
auf den Rückgabewert des Ausdrucks gelten weiter, um mehr Informationen zu extrahieren.)
>> age
die Extraktion weiter, Lesen (Da age
eine Ganzzahlvariable ist, eine Ganzzahl aus dem Eingabestrom, und speichert sie in der Variablen age
, und (Fortsetzung der Kette) gibt das ursprüngliche Streamobjekt class_details
zurück.
Der Ausdruck in der while(...)
Schleife zurückkehrt (aufgrund der Art, wie die Betreiber ermöglichen >>
chaining), um den ursprünglichen Eingangsstrom, das, wenn sie in Zusammenhang boolean
ausgewertet, den good()
Zustand Strom zurückkehrt. Wenn das Ende des Datenstroms festgestellt wurde oder eine ungültige Extraktion versucht wurde oder ein anderes Problem aufgetreten ist, würde good()
false
zurückgeben und die Schleife beenden.
Also, ohne Chaining (aber mit dem ,
Operator statt), könnte die oben umgeschrieben mehr werden verbosely wie:
string name;
int age;
while(class_details >> name, class_details >> age, class_details.good()) {
// Use name & age here.
}
EDIT
Wenn das Ziel zu ignorieren ist die name-Feld (überspringe den Namen, ohne es in eine Variable zu extrahieren), könnten Sie die ignore()
Methode verwenden, um alles bis zur nächsten sp zu überspringen ace Charakter:
int age;
while (class_details.ignore(numeric_limits<streamsize>::max(), ' ') >> age >> ws) {
// Use age here.
}
Die >> ws
verwendet wird zu Beginn des Namensfeld auf der nächsten Zeile jede white-space vom Ende des „Alter“ Feld zu verbrauchen ... insbesondere die " neue Zeile "Charakter.
Sie können die Nummer kleiner als numeric_limits<streamsize>::max()
verwenden, falls gewünscht. Wähle einfach etwas länger als deinen längsten Namen.
besser optimiert ist relativ. Welchen Code hast du jetzt? – tadman
@Tanya, was hast du bisher probiert? –
Der Eingabeoperator '>>' wird im Leerzeichen getrennt. –