Charzeichen in INTEGER



  • Hey ihr,

    Bin gerade dabei eine Funktion zu schreiben, welche eine String-Zahl z.B. "23423" in einen Integer umwandelt.
    Dabei bin ich auf ein Problem gestossen.
    Und zwar:

    string hallo = "1234";
    int a = hallo[3];

    'a' bekommt nun den ASCII-Wert von '4' und nicht direkt 4.
    Habe mir mit atoi(&) geholfen.

    cout << atoi(&hallo[3]) << endl;

    Doch atoi ist ne echt komische Funktion.
    Sie liefert nun zwar DIREKT die '4' doch auch gleich noch alle anderen darauf folgenden Zahlen bis zum Ende des Strings.
    Folgendes Beispiel gibt 3243 aus, statt nur 3:

    #include <iostream>
    #include <string>
    using namespace std;
    int main(void)
    {
       string hallo = "1223243";
       cout << atoi(&hallo[3]) << endl;
       system("Pause");
    }
    

    Woran liegt das?
    Gibts ne Alternative zu atoi, welche gut funktioniert oder muss ich mir jetzt sogar noch ne eigene Funktion schreiben, welche das macht?

    Wäre ja viel Arbeit - müssten schließlich alle ASCII-Zeichen rein 😞

    Bis dann und allen ne schöne Adventszeit.

    cya
    David



  • Doch atoi ist ne echt komische Funktion.
    Sie liefert nun zwar DIREKT die '4' doch auch gleich noch alle anderen darauf folgenden Zahlen bis zum Ende des Strings.

    LOL. Die Funktion ist nicht komisch, sondern macht eben genau das, was du da mit deiner eigenen Funktion bezweckst :D.

    Den Wert des der Ziffer erhälst du, wenn du einfach den Zeichencode von '0' von deinem gelesenen Zeichen abziehst (denk daran, dass in C/C++ chars auch bloß Zahlen sind):

    ...
    int a = hallo[3] - '0';
    ...
    

    Grüße

    Martin



  • atoi() erwartet einen c-string. Also übergeb doch mal hallo.c_str() an atoi(). Dann klappts.
    Aber schau mal in die FAQs, da steht was über dein Problem...



  • std::ostringstream wäre doch was. <sstream>



  • (D)Evil schrieb:

    std::ostringstream wäre doch was. <sstream>

    LOL.


Anmelden zum Antworten