C++ strtod() Rest Wert vergleichen

unXtremo

Ensign
Registriert
Feb. 2009
Beiträge
228
Hallo zusammen ich hänge gerade an einer Stelle bei der Umwandlung von einem String in ein double:

Ich habe einen String, der drei verschiedene Formen annehmen kann:
z.B.:
Typ1 (nur Zahl): "1"
Typ2 (nur Konstante): "var"
Typ3 (Zahl und Konstante): "2var"

Ich habe jetzt folgenden Codeschnipsel:
Code:
const double MEINE_KONSTANTE = 42;
string str = "2var";
char* restString;
double tmpZahl, zahl;
tmpZahl = strtod(str.c_str(), &restString);

if(*restString == '\0') { // Typ1
	zahl = tmpZahl;
} else if(tmpZahl == 0 && restString == "var") { // Typ2
	zahl = MEINE_KONSTANTE;
} else if(tmpZahl != 0 && restString == "var") { // Typ3
	zahl = tmpZahl * MEINE_KONSTANTE;
} else {
	cout << "Fehler: "  << tmpZahl << " | " << restString << " | " << *restString << endl;
}

Mein Problem ist jetzt die if-Bedingung von Typ2 und Typ3, leider trifft immer der Fehler Fall auf.
Ich hätte für Typ2 ja:
Code:
tmpZahl == 2
restString == "var"
*restString == 'v'
Was funktioniert ist, dass ich in die Bedingung *restString == 'v' schreibe, dann wird das Ergebnis richtig, aber mein auszuwertender String könnte dann ja auch "2vblub" sein und würde trotzdem als "2var" interpretiert werden.

Was mache ich mit meiner Bedingung falsch?
 
C-Strings vergleicht man nicht mit ==... stattdessen strcmp bzw. strncmp...
 
Hallo, danke für deine schnelle Antwort!

also schreibe ich in meine Bedingung
Code:
if(... && strcmp(restString, "var"))
...
allerdings gibt mir der Vergleich auch immer den Wert 0 zurück.

selbst wenn ich mir "var" ebenfalls in einen CString schreibe:
Code:
char var[4] = "var";
if(... && strcmp(restString, var))
...

Ich sehe gerade:
"A zero value indicates that both strings are equal.
A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2; And a value less than zero indicates the opposite."

wer lesen kann ...
 
Zuletzt bearbeitet:
Es wäre natürlich zu empfehlen vielleicht erstmal irgendwo nachzusehen was strcmp für einen Rückgabewert liefert bevor man es verwendet...
Die Aufgabenstellung könnte man wenn man faul ist übrigens auch mit std::string und stringstream lösen, das wäre dann auch weniger "C" und mehr "++".
 
Zurück
Oben