Das ist jetzt weniger eine Anfrage nach Eigenschaften von C++, sondern eher die Suche nach einer zündenden Idee.
Da ich in meinem Framework einen Satz von Funktionen habe, die mir "sicher" einen Text in eine Zahl umwandeln, indem sie atoi/atof kapseln und im Fehlerfall 0 zurückgeben, müsste ich den String nun in den Fällen, in denen 0 ein korrekter Rückgabewert sein könnte vorher überprüfen. Hierzu habe ich folgende Funktion geschrieben:
mal sehen, ob ich abspeichern kann, ohne dass der Code drin steht, und nachher wieder erstezen
Nun möchte ich dies erweitern, dass es auch Zahlenrepräsentationen der Form -1.23e-45 erkennt, in der Exponentialdarstellung sind aber weitere Kriterien drin, die ich nur über komplizierte Fallunterscheidungen auflösen könnte :
Gibt es da eine einfache Möglichkeit, dies zu testen, ohne die Anzahl der Nachkommastellen irgendwie einzuschränken (ein Umwandeln in eine double mit nachfolgendem sprintf und Textvergleich geht also nicht), oder bin ich wirklich darauf angewiesen, jedes Kriterium explizit zu testen? Gut, ich könnte ein atof in einen try-catch-Block kapseln, und dann false zurückgeben, wenn ich im catch gelandet bin, aber eine Überprüfung über das Auslösen einer Exception will ich eigentlich vermeiden, man weiß nie wie der Debugger damit umgeht...
Da ich in meinem Framework einen Satz von Funktionen habe, die mir "sicher" einen Text in eine Zahl umwandeln, indem sie atoi/atof kapseln und im Fehlerfall 0 zurückgeben, müsste ich den String nun in den Fällen, in denen 0 ein korrekter Rückgabewert sein könnte vorher überprüfen. Hierzu habe ich folgende Funktion geschrieben:
mal sehen, ob ich abspeichern kann, ohne dass der Code drin steht, und nachher wieder erstezen
Nun möchte ich dies erweitern, dass es auch Zahlenrepräsentationen der Form -1.23e-45 erkennt, in der Exponentialdarstellung sind aber weitere Kriterien drin, die ich nur über komplizierte Fallunterscheidungen auflösen könnte :
- nur ein E oder e, aber nicht direkt nach dem Dezimalpunkt
- wenn ein e drin ist, muss ein Punkt vorhanden sein, der muss aber nach dem (möglicherweise aber auch weggelassenen) Vorzeichen oder nach maximal einer Ziffer kommen
- nach dem e dürfen nur maximal 2 Ziffern kommen
- falls bis zu 2 Minusszeichen drin sind, dürfen diese nur an Position 0 und hinter dem e auftauchen
Gibt es da eine einfache Möglichkeit, dies zu testen, ohne die Anzahl der Nachkommastellen irgendwie einzuschränken (ein Umwandeln in eine double mit nachfolgendem sprintf und Textvergleich geht also nicht), oder bin ich wirklich darauf angewiesen, jedes Kriterium explizit zu testen? Gut, ich könnte ein atof in einen try-catch-Block kapseln, und dann false zurückgeben, wenn ich im catch gelandet bin, aber eine Überprüfung über das Auslösen einer Exception will ich eigentlich vermeiden, man weiß nie wie der Debugger damit umgeht...
Comment