Stringerkennung mit atof & Co



  • Hallo!

    Ich lese aus einer Datei immer 8 Zeichen lange strings aus.
    Die meisten dieser String muß ich zu Fließkommazahlen konvertieren was mit atof wunderbar klappt.

    Manchmal stehen aber auch Buchstaben drin (unterschiedlichen Anzahl, unterschiedlich im String platziert, aber alles Grossbuchstaben), die dann anders verarbeitet werden müssen.

    Das gibt dann Probleme, wenn wirklich eine Null gemeint ist und drin steht...

    Gibt es eine einfache Prüfung, ob ich wirklich eine (reine) Zahl in dem String habe?

    Die bisherigen Lösungen, die ich im Netz so gefunden habe, haben entweder ein Problem bei Exponentialdarstellungen (1.e7 wird nicht als Zahl erkannt) oder bei Leerstellen vor/hinter der Zahl im String. (" 50 " wird z.B, dann auch nicht als Zahl erkannt.

    Gibts da was einfaches oder muß ich mir die bisherigen Lösungen noch mal umschreiben?

    Ciao

    OkkaPapa



  • Du kannst strtod Mit dem zweiten Parameter (**endptr) kannst du erkennen, warum du Wandlung abgebrochen wurde.

    Oder du nimmst sscanf :

    char text[] = "3.141I";
    double zahl;
    char zeichen;
    int  retval;
    ...
    retval = sscanf(text, "%lf%c", &zahl, %zeichen);
    

    Wenn retval 0 ist, wurde keine Zahl erkannt und zahl wurde auch nicht geändert.
    Wenn retval 1 ist, gab es nach der Zahl kein Zeichen mehr.
    Wenn retval 2 ist, kannst du an zeichen erkennen, warum die Zahl zuende ist.



  • DirkB schrieb:

    Du kannst strtod Mit dem zweiten Parameter (**endptr) kannst du erkennen, warum du Wandlung abgebrochen wurde.

    Oder du nimmst sscanf :

    char text[] = "3.141I";
    double zahl;
    char zeichen;
    int  retval;
    ...
    retval = sscanf(text, "%lf%c", &zahl, %zeichen);
    

    Wenn retval 0 ist, wurde keine Zahl erkannt und zahl wurde auch nicht geändert.
    Wenn retval 1 ist, gab es nach der Zahl kein Zeichen mehr.
    Wenn retval 2 ist, kannst du an zeichen erkennen, warum die Zahl zuende ist.

    Hi!

    Habe es mal mit strtod probiert... aber bin immer in Probleme mit whitespaces gelaufen.
    Abhilfe habe ich mir mit strtok geholt...

    Danke für die Hilfe!

    Ciao

    OkkaPapa



  • strtok kann dir aber andere Probleme machen.

    Es zerstört den Quellstring und du kannst es nicht parallel benutzen, da es die aktuelle Position in einer static Variable speichert.


Anmelden zum Antworten