string in int umwandeln



  • habe ein problemm mit einer nummerierung von optionen...

    ich lese in ein string i eine zeile ein
    die nummerierung ist dynamisch deshalb muss ich es so lösen...

    if(i.length() == 1) { int z = (int)i[0]-48;
    ...
    }
    

    so funktioniert es

    jetzt meine frage wie mache ich das mit einem längeren string

    vorschlag

    for(int x = 1; x < i.length();x++) {
    int z;
    if(x == 1) { z = (int)i[x-1]-48; }
    if(x == 2) { z = z + (int)i[x-1]-48 * 10; }
    }
    

    wenn man den nächsten index einfach plus nimmt kommt ja auf ein anderes ergebnis... deshalb so

    aber ich möchte das ganze ohne ohne diese if anweisngen...

    wie wäre das realisierbar?



  • natürlich kommt da noch eine funktion die den gesamten string auf zahlen prüft, aber fürs erste soll es mal so funktionieren...



  • zu dem problem mit den if anweisungen...

    klar ich kann das prüfen mit if auf so und so viel stellen machen
    aber was ist wenn ich mal einen datensatz mit 10.000 datensätzen hab etc.

    vllt. ist es ja jedem klar aber zum verständnis das -48 mach ich da ja eine ascii 0 eine 48 ist und ich eine integer 0 brauche



  • suchst du sowas wie std::stoi() ?

    Außerdem ist bei der Variablen-Benennung noch Raum für Verbesserungen - strings würde ich mit s statt i bezeichnen, Laufindizes mit i statt mit x usw



  • okai mein compiler kennt stoi auf anhieb nicht.
    und auf eine google suche kommen nur ganz vage beispiele und angaben das es nicht auf alles compilern funktioniert...



  • Was hast du denn für einen?



  • anderer vorschlag wenn ich mit einer for schleife sämtliche stellen im string erst auf ne zahl prüfe und dann komplett -48 nehme also jede stelle und den sring hinterher in ein int umwandle sollte die entsprechende zahl auch dabei heraus kommen oder?

    werde das mal probieren...



  • code::blocks



  • die funktion std::stoi ist ab C++11 verfügbar, gucke mal ob du eine neuere c:b version verwendest und c++11 in den projekteinstellungen nicht deaktiviert hast.
    Ansonsten gibt es noch atoi().



  • atoi oder stoi?



  • okai atoi funktioniert gibt es da auch ne c++ konforme lösung dafür?
    stoi hab ich nicht zum laufen gebracht...



  • funktioniert mit der <cstlib> und atoi. Danke


  • Mod

    chris01349 schrieb:

    okai atoi funktioniert gibt es da auch ne c++ konforme lösung dafür?
    stoi hab ich nicht zum laufen gebracht...

    Die Streams machen das. Wenn du einen String hast, dann eben den String in einen Stringstream schieben. Aber du schreibst, dass du den String zuerst irgendwo einliest. Weitaus besser wäre daher, gleich eine Zahl einzulesen, wo eine Zahl gefragt ist. Die Methode, zuerst einen String mittels eines Streams einzulesen und dann den String mittels eines Streams zu zerlegen ist zwar weit verbreitet, aber eine unnötig umständliche Unsitte. Einfach direkt die Eingabe mittels eines Streams zerlegen.


Anmelden zum Antworten