Brauche Hilfe bei einer C++ Aufgabe.



  • Immerhin ist die zweite Antwort besser als die erste. *lol*

    Ich habe ja auch schon ein bisschen was gemacht, aber komme nicht mehr weiter.
    Hier ist das was ich schon gemacht habe:

    #include<iostream>
    #include<conio.c>
    #include<stdlib.h>
    #include<time.h>
    #include<string>
    using namespace std;

    int main()
    {
    cout<<"12.03.08\n\nSCHNICKY\nZufallsstring mit 20 Buchstaben\n\n";
    srand (time(NULL));
    string buchstaben;
    int anzahl=0;

    for (int i=0;i<20;i++){
    buchstaben=rand()%26+97;
    cout<<buchstaben<<" ";}

    getch();
    return 0;
    }



  • wenn du das nächste mal code postest bitte benutze die code-tags

    ansonsten, gebe ich dir folgenden Tip.
    Wenn du "zufällige" buchstaben erstellen sollst, dann musst du dir einen zufallswert erzeugen dessen untergrenze 65 ist und obere grenze 122 ist. weil das die teilweise alle druckbaren zeichen des alphabets sind. so und dann wandelst du diese zahl in einen string um



  • Hilft das?

    std::string filter(const std::string &str){
      // neuen zähler auf 0 setzen
      // schleife über jeden Buchstaben
      // - schauen ob es ein vokal ist
      //   - wenn ja dann zähler erhöhen
      // zähler ausgeben
    
      // http://www.cppreference.com/cppalgorithm/remove.html anschauen
      // und das ergebnis zurückgeben
    }
    


  • Also ich bin weiblich und verstehe die ganze Sache an sich überhaupt nicht wirklich. 😞
    Ich bin froh, wenn ich überhaupt ein bisschen kapiere.



  • Also ich bin weiblich

    Ah ok dann kriegste wahrscheinlich gleich die Komplettlösung



  • na wieso was verstehste denn jetzt nicht? ich habe dir schon ein paar gute tips gegeben und fellhuhn hat auch noch einen drauf gelegt



  • Ich verstehe die Sprache nicht. 😃



  • dann muss ich leider sagen, setzt dich hin und lies dir ein tutorial durch und probier aus;) ohne lernen und probieren wird das nichts



  • schnicky schrieb:

    Also ich ...verstehe die ganze Sache an sich überhaupt nicht wirklich. :(...
    ...Ich verstehe die Sprache nicht. ...

    Und ? Soll das so bleiben ?
    Wenn ja, dann wirst Du doch mit einer 6 ganz treffend benotet und solltest ab jetzt Deiner Freizeit genießen, statt im Internet in Foren rumzuhängen zu Themen, die Dich nicht interessieren ... :p

    Gruß,

    Simon2.



  • 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