Char auf Zahlen Prüfen und in int umwandeln
-
Darter schrieb:
ok danke erstmal.
So bekomme ich jetzt wenigstens mal keinen fehler vom compilierer mehr.
Mein zweites Problem ist ja immer noch, dass ich, wenn eben nur zahlen im String ethalten sind, dass diese dann in ein int gepackt werden, hat da noch jemand ne idee?Dazu hast du ja wohl schon genügend Antworten bekommen. Und bei den gegebenen Antworten ist es auch gar nicht nötig, vorher den String zu prüfen, weil dies schon erledigt wird.
Falls du es dennoch selber machen willst: Mach dir klar wie eine Stellenwertsystem funktioniert und dann rechne. Die rechteste Stelle im String zählt 1, die zweirechteste Stelle zählt 10, und so weiter.
Und eine Sache die du noch wissen musst zum selbermachen: Gegeben ein Zeichen a mit einem Wert zwischen '0' und '9'. Dann entspricht
a-'0'
dem Wert dieser Ziffer. Also wenn a gleich '0' ist, dann ist a-'0' gleich 0, ist a gleich '5', so ist a-'0' gleich 5. Und so weiter.
-
Also ich wie ich auch schon geschrieben habe funktioniert bei mir die Funktion
isdigit() nicht, da ich immer die Fehlermeldung erhalte:Konvertierung von const char * in int nicht möglich
mfg Darter
-
Darter schrieb:
const char *string = "test123k"; for(int i = 0; i < sizeof(string); i++)
Liest du eigentlich auch die Antworten, die dir gegeben werden?
Übrigens: Eine Dokumentation zur Standardbibliothek gibts auf www.cplusplus.com. Schau dir diese auch mal an, dann weisst du nämlich, wie
isdigit()
zu verwenden ist.
-
Hey.
Ja sorry ich hatte das verstauscht und statt bei string hatte ich stringlen bei azeichen angewendet -.- .
Und ja die reference hab ich mir hier angschaut:
http://www.cplusplus.com/reference/clibrary/cctype/isdigit/
-
Darter schrieb:
Konvertierung von const char * in int nicht möglich
Wenn du da einen
const char *
übergibst, machst du was falsch. Da sollte einconst char
übergeben werden. Wenn du den String mit isdigit checken willst, so musst du dies zeichenweise tun.
-
joa klar.
So habs ichs Probiert aber wie du vorher schonmal geschrieben hast wir in einem String das erste zeichen 1 das zweite 9 sein richtig?
Ich hab da jetzt mal in google gesucht ob ich mehr dazu herausbekomme wie ich das nun mach ich muss ja das alle zeichen einzeln überprüfen.
Hab ihr vllt nen link für mehr infos darüber sonst muss ich eben weiter googeln.
WIe schon geschrieben so funktioniert es ja nicht, liget aber ja wohl daran, dass eben die zeichen nicht im 1 2 und 3 element gespeichert werden sondern eben anders richtig?
const char *string = "11a"; bool test = true; for(int i = 0; i > strlen(string); i++) { if(!isdigit(string[i])) test = false; }
EDIT: ach ja man könnte natürlich nach test = false; ein break einbauen, da eine weitere überprüfung ja sinloss wäre ^^
-
i > strlen(string);
Da stimmt was nicht.
isdigit(!string[i])
Und hier ist wohl das Ausrufezeichen an falscher Stelle.
Übrigens würde ich die Länge vorher abspeichern, sonst musst du sie bei jedem Schleifendurchgang neu berechnen.
-
ja da hatte ich nur rumgespielt, da ich mir nichtmehr sicher war, ob i direkt erhöht wird oder erst nach ablauf der schleife^^
-
So ok ich dank euch für eure unendliche Gedult
Da das Forum zugleich auch eine lösungssammlung ist hier noch die Lösung die Funktionieren müsste, wenn nicht berichtigt mich -.-
bool isnum = true; char *Teststring = "1234rrt" int strlen = strlen(Teststring) for(int i = 0; i < strlen; i++) { if(!isdigit(Teststring[i])) isnum = false; } if(isnum) int test = atoi(Teststring);
-
Sieht schon gut aus! Vielleicht noch ein paar Details:
- Strichpunkte nicht vergessen.
- Stringliterale wie
"1234rrt"
würde ich inconst char*
und nichtchar*
speichern. Verändern darfst du sie ohnehin nicht, so verhinderst du allfällige Fehler. - Ich würde nicht
strlen
als Bezeichner wählen. - Wenn du willst, kannst du den Schleifeninhalt in einer Zeile mit logischem And
&&
ausdrücken. Nur falls dir langweilig ist...