String überprüfen auf Zahlen und Kommazahlen



  • genau so ist es korrekt, danke 🙂



  • Das kannst du als Anfänger überhaupt nicht beurteilen, ob etwas korrekt ist oder nicht.
    Deine "korrekte" Lösung scheitert z.B. an "+1234", "1234abc" u.ä.

    Es ist im Allgemeinen eine schlechte Idee, zeichenorientierte Probleme mit Integer-Numerik zu erschlagen.

    int laenge(const char *s)
    {
      return strspn(s,"0123456789")==4 && !s[4];
    }
    


  • Sind -1234 und +1234 keine 4-stelligen Zahlen?
    Deine Lösung akzeptiert auch 0001.



  • int laenge(const char *z)
    {
        if (!isdigit(*z) && (*z != '+') && (*z != '-')) return 0;
        const char *y = z+1;
        while (*(y++) != '\0')
            if (!isdigit(*(y-1))) return 0;
    
        return (abs(atoi(z)) < 10000) && (abs(atoi(z)) > 999);
    }
    

    Das hier akzeptiert: 1234; 01234; +1234; -1234; +01234; -01234
    Und gibt 0 zurück bei: 1234abc; 0001
    Edit: gibt 0 zurück bei ""



  • Lass es sein, das bringt nichts.
    Es geht nicht darum zu zeigen, dass man mit allerlei Handgefrickel alle möglichen Sonderfälle abdeckt, das kriegt jeder irgendwie hin, zumindestens für seine wenigen Testfällen. Allgemeinlösungen die keine Randbedingungen haben sind gefragt.
    Deine Lösung ist UB für "" und somit Müll.



  • Keine Ahnung was du möchtest, Wutz, aber der Bitmapper hat doch schon eine funktionierene Lösung geschrieben.



  • roflo schrieb:

    Keine Ahnung was du möchtest, Wutz, aber der Bitmapper hat doch schon eine funktionierene Lösung geschrieben.

    Welche nennste funktionierend?



  • volkard schrieb:

    roflo schrieb:

    Keine Ahnung was du möchtest, Wutz, aber der Bitmapper hat doch schon eine funktionierene Lösung geschrieben.

    Welche nennste funktionierend?

    Wutz hatte schon recht, allerdings sollte die letzte jetzt in Ordnung sein.


Anmelden zum Antworten