Hallo, ich habe einen CString, dessen Inhalt ich in einen double-Wert konvertieren möchte. Das kann die Funktion atof(..). Die liefert aber 0.0 zurück, wenn der String nicht konvertiert werden konnte, naja, aber eben auch 0.0, wenn im String "0.0" steht.
Gibt es da eine andere Möglichkeit, bei der ich diese beiden Fälle unterscheiden kann?
Gruß mathi
Zuletzt bearbeitet von estartu am 10:34:28 16.01.2006, insgesamt 1-mal bearbeitet
Dein Problem ist ein bischen verzwickt, da Du eine Unterscheidung zwischen Zahleneingabe und nur Texteingabe haben willst. Ich habe mal ein bischen in der MSDN Library rumgeblättert und eine Funktion namens strtod() gefunden und dazu eine kleine Routine geschrieben die Dein Problem lösen könnte.
C/C++ Code:
char* Rest; // Zeiger für den Rest des CStrings
CString Text = "12.34Und hier ist Ende"; // der zu bearbeitende Text
DOUBLE Wert = strtod(Text,&Rest); // Zerlegung des CStings in Zahl und Resttext if (Text == Rest) MessageBox("Es konnte keine Zahl entnommen werden","Meldung",MB_OK); // Meldung wenn nur Text vorhanden
C/C++ Code:
char* Rest; // Zeiger für den Rest des CStrings
CString Text = "12.34Und hier ist Ende"; // der zu bearbeitende Text
DOUBLE Wert = strtod(Text,&Rest); // Zerlegung des CStings in Zahl und Resttext if (Text == Rest) MessageBox("Es konnte keine Zahl entnommen werden","Meldung",MB_OK); // Meldung wenn nur Text vorhanden
C/C++ Code:
char* Rest; // Zeiger für den Rest des CStrings
CString Text = "12.34Und hier ist Ende"; // der zu bearbeitende Text
DOUBLE Wert = strtod(Text,&Rest); // Zerlegung des CStings in Zahl und Resttext if (Text == Rest) MessageBox("Es konnte keine Zahl entnommen werden","Meldung",MB_OK); // Meldung wenn nur Text vorhanden
Die Funktion splittet den CString in zwei Teile, einmal in den Double-Wert (hier 12.34) in der Variable Wert und in den Rest des Textes (in diesem Fall "Und hier ist Ende"). Sollte also nur eine Texteingabe erfolgen, so ist der Inhalt von der Variablen Text und der Variablen Rest der gleiche da keine Zahl in dem CString vorhanden war.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.