Zufällige Ausgabe mit "strings"?



  • Bitte ich weiss auch was.
    Einen vector<string> mit den strings füllen, random_shuffle drüberlaufen lassen und nach der Reihe ausgeben. Dann brauchst nicht überprüfen ob der String schon mal dran war.
    Kurt



  • ZuK schrieb:

    Bitte ich weiss auch was.
    ... random_shuffle drüberlaufen lassen und nach der Reihe ausgeben. Dann brauchst nicht überprüfen ob der String schon mal dran war.
    Kurt

    Ähm also, dass mit dem random_shuffle verstehe ich nicht. Habe ich dazu in der Suchmaschine nichts brauchbares gefunden. Wie meinst du das genau mit "random_shuffle"? Kann damit nichts anfangen, weil ich dass noch nicht kenne. Habe paar Monate C++ Programmierkenntnisse.



  • Dann informier dich mal über die STL.

    Hier ein Beispiel für random_shuffle:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    int main() {
        using namespace std;
    
        srand(time(0)); // Zufallsgenerator initialisieren
    
        vector<string> myVector; // String-Array
    
        myVector.push_back("Frage 1 - Wie alt bist du?");
        myVector.push_back("Frage 2 - Wie schwer bist du?");
        myVector.push_back("Frage 3 - Wo wohnst du?");
        myVector.push_back("Frage 4 - Wieviel Autos hast du?");
    
        random_shuffle(myVector.begin(), myVector.end());
    
        for(vector<string>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
            cout << *it << endl;
        }
    }
    

    mfg.



  • Danke für den Code aber ich kann damit nichts anfangen, weil ich das so noch nicht verstehe. So compilieren kann ich das wohl nicht oder?



  • Herr Neumann schrieb:

    Danke für den Code aber ich kann damit nichts anfangen, weil ich das so noch nicht verstehe. So compilieren kann ich das wohl nicht oder?

    Klar. Sollte so funktionieren wie es ist. Bei der STL-version für g++ 3.3 gibts dabei nur ein Problem dass srand() damit nicht funktioniert, du bekommst damit immer die gleiche Reihenfolge. Da müsstest du dir eine eigenes RandomNumberGenerator Funktionsobjekt schreiben.
    Kurt



  • mit random_shuffle() ordnest die Elemente eines containers "züfällig" an. Wenn man sie dann der Reihe nach ausgibt musst nicht mehr beachten ob ein String zweimal dran war.



  • ZuK schrieb:

    Klar. Sollte so funktionieren wie es ist. Bei der STL-version für g++ 3.3 gibts dabei nur ein Problem dass srand() damit nicht funktioniert, du bekommst damit immer die gleiche Reihenfolge.

    Damit der srand()-Aufruf dort oben funktioniert, fehlen aber noch zwei includes: <ctime> (für time(0)) und <cstdlib> (für srand()). Und außerdem garantiert der Standard afaik nicht, daß random_shuffle() auf der C-Funktion rand() aufbauen muß.



  • CStoll schrieb:

    ZuK schrieb:

    Klar. Sollte so funktionieren wie es ist. Bei der STL-version für g++ 3.3 gibts dabei nur ein Problem dass srand() damit nicht funktioniert, du bekommst damit immer die gleiche Reihenfolge.

    Damit der srand()-Aufruf dort oben funktioniert, fehlen aber noch zwei includes: <ctime> (für time(0)) und <cstdlib> (für srand()). Und außerdem garantiert der Standard afaik nicht, daß random_shuffle() auf der C-Funktion rand() aufbauen muß.

    Genau darum fragte ich ja ob der oben genannte Code sich so compilieren lässt. Denn es lässt sich so nicht compilieren weil mein Borland Compiler meldet:
    "Fehler E2268 C:\Programme\CBuilderX\include\stl/_algo.c 432: Aufruf der undefinierten Funktion 'rand int__random_number<int>(int)



  • Vielleicht geht's so

    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include <vector>
    #include <algorithm>
    
    struct rndgen {
        int operator () (int n) const ;
    };
    
    int rndgen::operator () (int n) const {
        static int initialized = 0;
        if ( !initialized ) {
            srand(time(0));
            initialized = 1;
        }
        return rand() % n;
    }
    
    int main() {
        using namespace std;
    
        vector<string> myVector; // String-Array
    
        myVector.push_back("Frage 1 - Wie alt bist du?");
        myVector.push_back("Frage 2 - Wie schwer bist du?");
        myVector.push_back("Frage 3 - Wo wohnst du?");
        myVector.push_back("Frage 4 - Wieviel Autos hast du?");
    
        rndgen rnd;
        random_shuffle(myVector.begin(), myVector.end(), rnd );
    
        for(vector<string>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
            cout << *it << endl;
        }
    }
    

    Kurt



  • Was heisst den hier vielleicht? Hast du das vielleicht mal selber compiliert ob das klappt? Leute anstatt irgend ein Code zuschreiben was nicht hinhaut, schreibt am besten gar nichts hin! Was seit ihr den für Programmierer??? 😡



  • Herr Neumann schrieb:

    Was heisst den hier vielleicht? Hast du das vielleicht mal selber compiliert ob das klappt? Leute anstatt irgend ein Code zuschreiben was nicht hinhaut, schreibt am besten gar nichts hin! Was seit ihr den für Programmierer??? 😡

    Würde mich etwas beruhigen. Natürlich klappt das. Wenn du unbedingt einen uralten nicht Standard Compiler verwenden willst dann darfst du dich auch nicht wundern wenn's bei dir nicht funktioniert.
    Wollte nur helfen. Idiot.
    Kurt



  • Herr Neumann schrieb:

    Was heisst den hier vielleicht? Hast du das vielleicht mal selber compiliert ob das klappt? Leute anstatt irgend ein Code zuschreiben was nicht hinhaut, schreibt am besten gar nichts hin! Was seit ihr den für Programmierer??? 😡

    Wenn wir schon auf dem Niveau angelangt sind, dann habe ich folgende Ideen für dich:

    - Registrier dich mal!
    - Sei ein bisschen freundlicher zu den Leuten die dir in ihrer Freizeit helfen
    - Merk dir: Jemand, der ohne vorher zu compilieren, einen Code schreibt, der auch noch funktioniert, der ist folgender Programmierer: Ein Profi!
    - Sag uns: Lässt es sich bei dir compilieren? Klappt es? Wenn nein: Was sind die Fehlermeldungen? Welchen Compiler (Version)?

    mfg.



  • Jetzt seid mal nicht so zickig! Wenn der Profi-Programmierer nicht in der Lage ist ein ordendlichen, fehlerfreien Code zu schreiben und zu testen ist der für mich ein Idiot!



  • Herr Neumann schrieb:

    Jetzt seid mal nicht so zickig! Wenn der Profi-Programmierer nicht in der Lage ist ein ordendlichen, fehlerfreien Code zu schreiben und zu testen ist der für mich ein Idiot!

    Der Code ist aber fehlerfrei.

    mfg.



  • Glaub wir haben's da mit einem Troll zu tun.
    Kurt



  • Ok dann lassen wirs eben. Wenn man sagt vielleicht geht es so, dann ist man ein Profi. Vielleicht bin ich auch ein Profi. Gute Nacht und einen schönen Sonntag noch.



  • Herr Neumann schrieb:

    Ok dann lassen wirs eben. Wenn man sagt vielleicht geht es so, dann ist man ein Profi. Vielleicht bin ich auch ein Profi. Gute Nacht und einen schönen Sonntag noch.

    Er hat ausdrücklich gesagt das es so geht, im Post danach.

    mfg.


Anmelden zum Antworten