C++ Funktion für Zufallsbuchstaben ?



  • Hallo an alle,
    gibt es eine Funktion um Zufallsbuchstaben zu erzeugen?
    Kann von mir aus auch eine C Funktion sein wie rand() .

    Mir ist zwar die Idee gekommen für jeden Buchstaben im Alphabet einfach ein case mit ner Zahl anzulegen , und dann mit rand() die Zahlen im Berreich des Alphabets erzeugen lasse , um so Zufallsbuchstaben ansprechen zu können.
    Bevor ich das aber so mache wollte ich gerne wissen ,ob es für sowas auch eine Funktion im C/C++ Standart gibt welche mir die unnötige Schreibarbeit ersparen könnte , oder ob es einen besseren Weg zum erzeugen der Buchstaben gibt.



  • std::string buchstaben = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char zufallsBuchstabe = buchstaben[rand()%buchstaben.size()];
    


  • // Kleinbuchstaben:
    'a' + zufallszahl(0, 25)
    
    // Grossbuchstaben
    'A' + zufallzahl(0, 25)
    

    zufallszahl() kannst du dir mit rand() oder den C++11 Zufallsgeneratoren bauen.



  • std::default_random_engine generator;
        std::uniform_int_distribution<char> lowerCase{'a', 'z'}; // Die Identifier sind vielleicht missverständlich :D
        std::uniform_int_distribution<char> upperCase{'A', 'Z'};
    

    Und dann jeweils für Groß- und Kleinbuchstaben entsprechend umändern.



  • buchstabe schrieb:

    std::string buchstaben = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char zufallsBuchstabe = buchstaben[rand()%buchstaben.size()];
    

    👍



  • --



  • Ethon schrieb:

    buchstabe schrieb:

    std::string buchstaben = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char zufallsBuchstabe = buchstaben[rand()%buchstaben.size()];
    

    👍

    Du bist wohl der ganz paranoide, der EBCDIC zum Beispiel nimmt und sagt, man darf nicht annehmen, dass das Alphabet vorwärts konsekutiv kodiert ist? 😃


  • Mod

    Er ist der Vorausschauende, der seine Funktion ganz leicht auf andere Zeichen erweitern kann, während der Trickser in diesem Fall seinen Code komplett umschreiben müsste. Da die Nachteile (5 Sekunden Schreibaufwand) gegen 0 gehen, ist das sicherlich eine gute Idee.



  • buchstabe schrieb:

    std::string buchstaben = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char zufallsBuchstabe = buchstaben[rand()%buchstaben.size()];
    

    Sone schrieb:

    std::default_random_engine generator;
        std::uniform_int_distribution<char> lowerCase{'a', 'z'}; // Die Identifier sind vielleicht missverständlich :D
        std::uniform_int_distribution<char> upperCase{'A', 'Z'};
    

    Und dann jeweils für Groß- und Kleinbuchstaben entsprechend umändern.

    Ich würde die Plattformunabhängigkeit vom ersten und das C++ vom zweiten nehmen.

    std::default_random_engine rng;  // your rng here
    std::uniform_int_distribution<int> d(0,25);
    char c = "abcdefghijklmnopqrstuvwxyz"[d(rng)];
    

Log in to reply