char to int
-
Hi,
ich will einen Character in einen Integer konvertieren. Also z.B.
char c = '6' in eine Integer Variable (int iInt = 6) schreiben. Das Problem dabei ist, dass die ganze sache ohne Zuhilfenahme der C Standardbibliothek gemacht werden soll --> somit soll die Funktion atoi nachgebildet werden. Mein Problem ist, dass ich nicht weiß wie ich an die Sache heran gehen soll. Danke schon mal im Voraus
-
So sollte es gehen:
int convert(char c) { return ((c >= '0' && c <= '9') ? c-'0' : -1); }
Falls keine gültige Zahl in ASCII Darstellung übergeben wurde, wird -1 zurückgegeben.
-
gehts dir um nen char oder um nen char*? atoi nimmt jedenfalls einen char*, und mit nem char wärs ein bisschen sehr trivial.
Was den Algo angeht, da gibts mehrere Möglichkeiten. Meine erste Idee wäre, den String durchzuiterieren, das bisherige Ergebnis mal 10 zu nehmen, die momentan aktuelle Ziffer draufzurechnen, und das so lange zu wiederholen, bis der String zu Ende ist, also (ungetestet):
int my_atoi(char *num) { int result = 0; for(char *p = num; isdigit(*p); ++p) { result *= 10; result += *p - '0'; } return result; }
Wenn du der Funktion "123" gibst, nimmt result dann nacheinander die Werte 0, 0 * 10 = 0, 0 + 1 = 1, 1 * 10 = 10, 10 + 2 = 12, 12 * 10 = 120, 120 + 3 = 123 an.
Das Vorzeichen und das Auseinanderpfriemeln von isdigit überlasse ich dir, damit du dich mit dem Code auseinander setzen musst und dabei was lernst...
-
0xdeadbeef schrieb:
Das Vorzeichen und das Auseinanderpfriemeln von isdigit überlasse ich dir, damit du dich mit dem Code auseinander setzen musst und dabei was lernst...
Statt isdigit kann er dann ja meine Funktion nehmen (er wollte ja keine Funktion aus der Stdlib nehmen)
-
Thx für die Antworten. Der Algo ist net schlecht, muss man erst ma drauf kommen. Damit konnte ich doch auf anhieb mein Problemchen lösen.
-
Hi!
Ich habe es mal für ne Aufgabe fast genau so implementiert, allerdings habe ich mir die temporäre (überflüssige) Variable gespart und eine while-Schleife verwendet:
int my_atoi(const char* str) { int erg = 0; // erg save the result while(isdigit(*str)) erg = erg * 10 + (*(str++)-'0'); return erg; }
Code-Hacker