Überprüfen, ob ein String eine Zahl ist
-
Hallo Leute,
bestimmt steht das schon irgendwo, aber ich habe es leider nicht finden können.
Wie kann ich einen String darauf untersuchen, ob er ausschließlich eine Zahl enthält? Also z.B. "2246", aber nicht "r2d2", "abc" oder "!#+".
Bei Google habe ich nur Lösungen mit "true" und "false" gefunden, und das gibt es bei einfachem C doch gar nicht - oder?
Gruß und Dank im Voraus
-
Kommt drauf an, was Du mit C meinst und ob es nicht einfach reichen würde, statt "false" eine 0 und statt "true" eine 1 zu nehmen. Dann müßte Deine Funktione statt bool einen int zurückgeben.
Kannst Du Deine Versuche ein wenig dahingehend präzisieren, daß Du was als Code anbringst, wo wir noch ein wenig dazufummeln und dann geht es?
So ganz frei aus der Luft weiß ich recht wenig, was Du am Ende brauchst von den vielen Möglichkeiten.
-
Am einfachsten macht man das ganze, in dem man die Funktion man: isdigit benutzt
_Bool string_is_number(char const *str) { while(*str) { if(!isdigit(*str)) { return 0; } ++str; } return 1; }
Bei Google habe ich nur Lösungen mit "true" und "false" gefunden, und das gibt es bei einfachem C doch gar nicht - oder?
Kann man aber definieren. zB in stdbool.h findet man eine entsprechende Definition
-
Ich verwende dafür immer man: strtoll(3), schließlich ist "0xdeadbeef" auch eine Zahl.
#include <stdbool.h> bool string_is_number(const char *str, long long int *num) { long long int dummy; char *err; if(num == NULL) num = &dummy; *num = strtoll(str, &err, 0); if(*err) return false; return true; }
-
Evtl. auch man: strtol anschauen.
-
Für Dezimalzahlen von LONG_MIN...LONG_MAX inkl. Vorzeichen könnte es so aussehen:
int isNumber(const char *s) { char *r; strtol(s,&r,10); return *s && !*r; }