Zahl bis zu + einlesen



  • Hi, ich habe dieses kleine Programm, was eigentlich nur
    alle Zeichen bis zum + einlesen soll und in der Variablen a speichern soll.
    Dem entsprechend müsste es 534 ausgeben.
    Allerdings wird 156 ausgegeben.

    //Bis zum + Zahl einlesen
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
        vector<char> c(6);
        int a = 0;
    
        c = {'5','3','4','+','2','0'};
    
        for(int i=0; i < c.size(); i++){
    
            if (c[i] != '+'){
                a = a + static_cast<int>(c[i]);
            }
            if (c[i] == '+'){
                break;
            }
        }
    
        cout<<a<<endl;
    
        return 0;
    }
    


  • @theAnfänger77 sagte in Zahl bis zu + einlesen:

    Dem entsprechend müsste es 534 ausgeben.

    Warum?



  • static_cast<int>('5') == 53 (in ASCII)
    Einzelne Ziffern kannst du entweder umwandeln, indem du die Differenz zu '0' berechnest oder indem du std::stoi nimmst.

    Also:
    int ziffer = c[i] - '0';

    Aber bedenke, dass du dann 5 + 3 + 4 rechnen würdest = 12. Denk mal darüber nach, wie man die 5 zur 500 macht usw.



  • @theAnfänger77 sagte in Zahl bis zu + einlesen:

    vector<char> c(6);
    

    Den Vector brauchst du hier ansich nicht.

    Dafür bietet sich std::string an, was im Grunde auch nichts anderes ist, als ein Vector von Zeichen.
    Du kannst mit einer klassischen Schleife über den String laufen und er serviert dir die einzelnen Zeichen.

    std::string MyText = "534+20";
    for ( const char &sign : MyText )
    {    
        ...
    }
    


  • Danke für die Antworten



  • Und du könntest anstatt deinem zweiten if einfach ein else nutzen. Du fragst einmal ob es ungleich ist und dannach ob es gleich ist. Wenn es nicht ungleich ist, muss es ja gleich sein 🙂


Log in to reply