small prob.



  • mein programm soll die anzahl der buchstaben e ermitteln, aber das funktioniert irgendwie nicht, hoffentlich könnt ihr mir weiterhelfen.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string satz;
        getline(cin, satz);
        int sum(0);
        int x = 0;
        double prozent(0);
        int z = satz.length();
    
        while(x!=z)
        {
            if(x==satz.find("e"))
            {
                cout << satz.find("e") << endl;
                sum+=1;
    
            }
    
            satz.replace(x,x,"x");
            x++;
    
        }
        cout << z << satz;
        prozent = sum/satz.length()*100;
        cout << "Es wurde " << sum << " mal e gefunden. Der prozentuale Anteil beträgt " << sum/satz.length() <<"%." << endl;
    
    }
    


  • Die Funktion find gibt die erste Position an der ein 'e' gefunden wird zurück. Du willst aber eigentlich testen ob an der aktuellen Position ein 'e' steht. Also irgendwie sowas:

    if(satz[x] == 'e')
    {
        cout << x << endl;
        sum+=1;
    }
    

    Dazu ist dein replace glaube ich falsch und eine for Schleife würde sich hier anbieten.



  • Danke das hat mir weitergeholfen, habs mit der for schleife ersetzt, hatte mindfuck bei arrays aber habs verstanden, naja aber mein programm hat noch einen fehler. Es zeigt die ganze zeit 0% an.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string satz;
        getline(cin, satz);
        int sum(0);
        double prozent(0);
        int z = satz.length();
    
        for(int x=0;x!=z;x++)
        {
            if(satz[x] == 'e')
            {
                sum+=1;
    
            }
    
        }
        prozent=sum/satz.length()*100;
        cout << "Es wurde " << sum << " mal e gefunden. Der prozentuale Anteil beträgt " << prozent<<"%." << endl;
    
    }
    




  • Hint: In C++ ist 5/7 gleich 0 (Stichwort: Integerdivision).



  • habs aber double gesetzt
    oder muss ich eine template dafür machen?



  • sum ist ein Integer und satz.length() auch. Was prozent für einen Typ hat, spielt da keine Rolle. Wenn beide Operanden eine Ganzzahl sind, wird Integerdivsion gemacht.

    Du musst also eine der beiden Operanden in einen double casten.

    PS: Wieso initialisierst du deine Variablen mit runden Klammern???



  • hab ich mir angewöhnt diese schreibweise find ich irgendwie übersichtilicher mit den klammern, aber wie fix ich jetzt mein problem?

    ________________________________________________________

    nvm gefixed 😃
    danke für die hilfe



  • Hi,

    so wie youshallnotdivide es bereits beschrieben hatte.

    Caste einen der Integerwerte in einen double, z.B. so:

    prozent=(double)sum/satz.length()*100;
    

Log in to reply