unsigned int umwandlung

klo

Mitglied
Hallo

ich habe in einem Programm ein std::string objekt...

nun wenn ich von der console per cin einen unsigned int einlese funktioniert das recht gut zwecks fehler erkennung ob <0 oder >UINT_MAX frage kann ich mir das auch für die Umwandlung des Strings in einen unsigned wert benutzen?

leider darf ich zwecks vorgabe nur iostream verwende.

hoffe ihr könnt mir nen tip geben.

lg
 
Hi

Ich hab keine Ahnung was du willst.
Formulier deine Frage bitte ordentlich und halte dich an die Netiquette.
Mit einer Anmeldung vor knapp fünf Jahren dürftest du genug Zeit gehabt haben, diese zu lesen.

Jedenfalls ist ein unsigned int nie kleiner als 0 oder größer als UINT_MAX, die Überprüfung kannst du dir also sparen.

Gruß
 
Hallo

also ich habe einen string von dem Ich hoffe das er einen gültigen unsigned Int enthält, diesen möchte ich nun in unsigned int umwandeln. Sollte er aber keinen gültigen unsigned int beinhalten (z.B. ein - oder eine zu große Zahl) dann möchte ich das ebenfalls abprüfen können.

Wenn ich das ganze vom stdin einlese würde ich es mit cin>>variable; if(cin.fail())... abfragen können.

Gibt es nun eine Möglichkeit bei der Umwandlung auf cin oder vergleichbares in iostream zurück zu greifen?

lg klo
 
Nicht das ich wüsste.
Wenn du kein sscanf verwenden darfst, kannst du ja auch eine selbstgeschreiebene Funktion einsetzen.

Ist nicht schwer.
Für jeden neuen char mit 10 multiplizieren und den Ziffernwert dazuzählen.
Den vorigen Wert irgendwo zwischenspeichern
Wenn der neue Wert nach "mal 10 plus ..." kleiner ist als der vorige war die Zahl zu groß.
Ob Buchstaben etc dabei sind kann man ja mit einem einfachen if überprüfen.

Gruß
 
kk ich hab schon gesucht wie cin die Umwandlung durchführt habe aber nichts gefunden an code wo der operator >> für unsigned int überladen wird.

Die Manuelle sache kenn auf +.- führende 0 und sonstiges zu achten allerdings passt mir das nicht ins oop concept das in dieser Klasse zu machen und zusätzliche Klassen darf ich nicht anlegen...(genau da beginnt ja der Sc***ß... is aber spezi der HUE...und sonderbar viel dazu finde ich nicht im Inet...)

Jemand ne Idee wie ich das angehen könnte...?


lg Michael
 
Hi.

Verwende einen istringstream:
C++:
std::istringstream input(dein_std_string);
unsigned int ui;
if (input >> ui) {
  std::cout << "ok";
} else {
  std::cerr << "Fehler";
}
Gruß
 
  • Gefällt mir
Reaktionen: klo
Danke für die Info.

Ich nachdem sich jetzt aber genug leute beschwert haben ist nun die Klasse sstream erlaut....

Eine frage hätte ich noch wie prüft das obrige If ob die Umwandlung gültig war? (sicher nicht an der Variable ui den 0 wäre ja auch ein gültiger unsigend.

ich prüfe zurzeit mit .fail()

lg klo
 
Eine frage hätte ich noch wie prüft das obrige If ob die Umwandlung gültig war? (sicher nicht an der Variable ui den 0 wäre ja auch ein gültiger unsigend.

ich prüfe zurzeit mit .fail()
Der >>-Operator gibt eine Referenz auf den Stream zurück. Einen Stream kann man wie einen Boole'schen Ausdruck verwenden (dank der Überladung von operator bool), der dem Wert von !fail() entspricht. Man hätte also gleichbedeutend
C++:
std::istringstream input(dein_std_string);
unsigned int ui;
input >> ui;
if (input.fail()) {
  std::cerr << "Fehler";
} else {
  std::cout << "ok";
}
schreiben können. Wie man es formuliert ist demnach Geschmackssache.

Grüße,
Matthias
 
Zurück