Benutze kein gutes ()! Testen Sie, ob der Stream fehlgeschlagen ist oder nicht :
%Vor%Good sagt Ihnen, ob eofbit, badbit oder failbit gesetzt sind, während fail () Sie über badbit und failbit informiert. Sie interessieren sich fast nie für eofbit, es sei denn, Sie schon wissen, dass der Stream fehlgeschlagen ist, so dass Sie fast nie gut verwenden möchten.
Beachten Sie, dass das Testen des Streams direkt wie oben genau entspricht:
%Vor%Umgekehrt ist! ss äquivalent zu ss.fail ().
Kombinieren der Extraktion in den bedingten Ausdruck:
%Vor%Entspricht genau:
%Vor%Wahrscheinlich möchten Sie jedoch testen, ob die komplette Zeichenfolge in ein Double konvertiert werden kann, was ein wenig komplizierter ist. Verwenden Sie boost :: lexical_cast, das bereits alle Fälle behandelt.
Wenn Sie überprüfen möchten, ob eine string
nur eine Zahl und nichts anderes (außer Leerzeichen) enthält, verwenden Sie Folgendes:
ss >> std::ws
ist wichtig für die Annahme von Zahlen mit nachgestellten Leerzeichen wie "24 "
.
Die Überprüfung ss.eof()
ist wichtig, um Zeichenfolgen wie "24 abc"
zurückzuweisen. Es stellt sicher, dass wir das Ende der Zeichenfolge nach dem Lesen der Zahl (und Leerzeichen) erreicht haben.
Testkabel:
%Vor%Ausgabe:
%Vor%Tags und Links c++ numbers stringstream words