Umwandlung eines C-Strings in seinen Integerwert
-
Guten Tag,
habe folgene Aufgabenstellung erhalten.Außerdem soll man keine Bibliotheksfunktionen benutzen.
Umwandlung eines C-Strings (ohne Vorzeichen) der eine natürliche Zahl darstellt in seinen Integerwert. Negative Zahlen werden nicht berücksichtigt. Falls die Zeichenkette ein Zeichen ungleich den Ziffern 0,1,....,9 enthält, soll eine Fehlermeldung ausgegeben werden. (Beispiel: Ich tippe 37 auf der Tastatur, d.h. der String s=“37“ wird eingelesen. Mit dem Ausdruck: i = 10*(’3’-’0’)+’7’-’0’; erhalte ich den Integerwert 37 aus dem String s.Leider komme ich nun nicht weiter.
#include <iostream> using namespace std; int main() { char zahl[50]; cout << "Eingabe (0-9):"; cin >> zahl; for(int i = 0; i<=zahl[i]; i++) { if(zahl[i] >= '0' && zahl[i] <= '9') { } else { cout << "Nur 0-9"; } } }
-
Guck dir mal die ASCII Tabelle an.
Tipp: Was ist das Ergebnis folgender Rechnung: '4' - '0'?
-
char zahl[50]; cout << "Eingabe (0-9):"; cin >> zahl; istringstream iss(zahl); // braucht #include <sstream> int i; iss >> i;
-
@Gugelmoser
Vorzeichen soll nicht beachtet werden. Sechs, setzen. :xmas1:
-
Gugelmoser schrieb:
char zahl[50]; cout << "Eingabe (0-9):"; cin >> zahl; istringstream iss(zahl); // braucht #include <sstream> int i; iss >> i;Wenns wenigstens atoi gewesen wäre ... aber dafür nen fetten Stream konstruieren? Brrr.
Außerdem denke ich er soll es sekbst implementieren.
-
cooky451 schrieb:
Guck dir mal die ASCII Tabelle an.
Tipp: Was ist das Ergebnis folgender Rechnung: '4' - '0'?
Das Ergebnis lautet 4.
Leider weiß ich nicht was das bedeutet.
-
Der Integerwert von '4' subtrahiert dem Integerwert von '0' ergibt ... 4!
Ergo ist das dein Plan: Du gehst den String von hinten durch, bestimmst den Zahlenwert des chars durch eine Substraktion mit '0', multiplizierst das Ganze mit einer Potenz von 10 und addierst das Ganze.Zb:
String: "4531"
Integer:
('1' - '0') * 1 +
('3' - '0') * 10 +
('5' - '0') * 100 +
('4' - '0') * 1000
-
Das Ergebnis lautet: 4. Oh Wunder.
int i = '0' - '4'; std::cout << i;Wenn jetzt der Groschen nicht fällt..
-
unsigned atoi(char const* str) { unsigned result = 0; while(*str && *str >= '0' && *str <= '9') (result *= 10) += *str++ - '0'; return result; }
-
line ist nicht definiert und der Vergleich mit 0 bzw 9 wird so auch eher nicht sinnvoll sein.
-
Danke für den Hinweis, ist korrigiert.