Brauche Hilfe bei einer C++ Aufgabe.



  • Doch ich will die endlich richtig lernen, aber leider komme ich erst zu dem Osterferien dazu. Ich mache mein Abi auf der Abendschule und gehe vorher 8 Std. am Tag arbeiten, d. h. ich habe nur meine Wochenenden zum lernen.
    Ich werde mich über Ostern hinsetzen und diese Sprache lernen. 🙂



  • schnicky schrieb:

    Doch ich will die endlich richtig lernen, aber leider komme ich erst zu dem Osterferien dazu. ...

    Also in der Zeit, in der Du Dich hier im Forum schon rumgetrieben hast, hättest Du (z.B. anhand der Vorschläge hier) schon Einiges über die Sprache lernen können.
    Entweder hast Du gar keine Zeit - dann würden wir Dich hier gar nicht sehen - oder Du verbringst sie falsch (z.B. mit Betteln um Arbeitsabnahme).
    😃

    Gruß,

    Simon2.



  • Ich sitze auf Arbeit. Ich habe leider nicht soviel Freizeit, wo ich lernen kann. Mir bleibt praktisch nur mein Wochenende, aber egal.





  • Ja, super! Danke für die Links, werde mir dieser aber leider erst am Wochenende angucken können.



  • #include <algorithm>
    #include <string>
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <functor>
    
    std::string filter(std::string const&);
    inline char random_char() { return std::rand() % ('a' - 'z') + 'a'; }
    
    int main()
    {
        // Zufallszahlengenerator initialisieren ...
        std::srand(static_cast<unsigned>(std::time(NULL)));
    
        // Generate String
        std::string random_string(20, 0);
        std::generate(random_string.begin(), random_string.end(), random_char);
    
        std::cout << filter(random_string) << std::endl;
    }
    
    std::string filter(std::string string)
    {
        unsigned int a(0);
        unsigned int e(0);
        for (std::string::const_iterator it(string.begin()); it != string.end(); ++it)
            if (*it == 'a') ++a; 
            else if (*it == 'e') ++e;
    
        std::cout << "a: " << a << "mal; e: " << e << "mal\n";
    
        std::remove_if(string.begin(), string.end(), std::bind2nd(std::equal_to<char>(), 'i'));
        return string;
    }
    

    fertig 😃



  • Sollte es hier inline char random_char() { return std::rand() % ('a' - 'z') + 'a'; } nicht 'z'-'a' heißen statt andersrum?



  • Simon2 schrieb:

    darcon schrieb:

    ...
    Soweit ich weiß ist D(Evil) schwul, hat also nichts mit ihrem Geschlecht zu tun.

    Oder eben doch ... sind doch angeblich die besten Frauenversteher überhaupt. 😉

    Gruß,

    Simon2.

    Naja.. Ich bezweifle das, da darcon nicht angemeldet ist und wie gross ist die Wahrscheinlichkeit, dass jemand, der ihn kennt gerade jetzt reinkommt und das auch noch durch seinen Namen durchsieht, dass das der ist.. 🙄



  • Falls (D)Evils Lösung zu "fortgeschritten" (d.h. für einen Anfänger schlicht unveständlich) ist, hier eine Alternative. Weiß ja nicht, auf welchem Niveau ihr schon seid. 😉

    #include<iostream>
    #include<cstdlib>
    #include<ctime>
    #include<string>
    using namespace std;
    
    string meinefunktion(string s) {
    
        int a = 0;
        int e = 0;
        int h = 0; // Hilfsvariable
        string hilf(20,'+'); //Hilfsstring der Größe 20 gefüllt mit dem Zeichen '+'
    
        for (int i=0; i < 20; i++) {
            if (s[i] == 'a')    // Vokale a zählen
                a++;
            if (s[i] == 'e')    // Vokale e zählen
                e++;
            if (s[i] != 'i') {
                hilf[h] = s[i]; //Werte ungleich 'i' in den Hilfsstring schreiben
                h++;            //Hilfsvariable h gibt die nächste freie Position im Hilfsstring an
            }
        }
    
        hilf.resize(h); //Hilfsstring auf die Anzahl der hineingeschriebenen Zeichen verkürzen
    
        // Anzahl der Vokale a und e ausgeben
        cout << "a: " << a << endl;
        cout << "e: " << e << endl;
    
        return hilf; //Hilfsstring zurückgeben
    }
    
    int main()
    {
        cout<<"12.03.08\n\nSCHNICKY\nZufallsstring mit 20 Buchstaben\n\n";
        srand (time(NULL));
        string buchstaben(20,'+'); //String der Länge 20 gefüllt mit dem Zeichen '+'
    
        // Die Positionen 0 bis 19 des Strings "buchstaben" mit einem zufälligen Zeichen besetzen
        for (int i=0; i<20 ; i++){
            buchstaben[i] = rand() % 26 + 97;
        }
    
        // Zufallsstring "buchstaben" an eine Funktion übergeben
        buchstaben = meinefunktion(buchstaben);
    
        // String ausgeben
        cout << buchstaben << endl;
    
        return 0;
    }
    

    Falls es reicht die Vokale i einfach durch ein Leerzeichen zu ersetzen tut es auch folgenden Funktion:

    string meinefunktion(string s) {
    
        int a = 0;
        int e = 0;
    
        for (int i=0; i < 20; i++) {
            if (s[i] == 'a')
                a++;
            if (s[i] == 'e')
                e++;
            if (s[i] == 'i')
                s[i] = ' ';
        }
    
        // Anzahl der Vokale a und e ausgeben
        cout << "a: " << a << endl;
        cout << "e: " << e << endl;
    
        return s;
    }
    


  • Badestrand schrieb:

    Sollte es hier inline char random_char() { return std::rand() % ('a' - 'z') + 'a'; } nicht 'z'-'a' heißen statt andersrum?

    Auszug aus dem Standard:

    "... If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined..."

    Ich würde sagen wenn man es venünftig machen will, ist 'z'-'a' die eindeutig bessere Wahl. 🙂


Anmelden zum Antworten