zufällige strings generieren



  • Hallo!
    Bin noch Anfänger.
    Ich weiss zwar wie man Zufallszahlen erzeugen kann.
    Aber ich möchte nun eine zufälligen Schlüssel generieren der aus Gross-,Kleinbuchstaben,Ziffern und evtl ein paar Sonderzeichen besteht.
    Wie kann ich das anstellen .Hab gelesen das alle Buchstaben nen ASCII-Code (Zahl) haben. Also dann müsste ich wohl ne Zahl in den Bereichen erzeugen.
    Geht das ? Eine Zufallszahl die mehrere Bereiche z.b.1-10 und 500-800 und ..
    hat?
    Und wie wandele ich dann die Zahlen in Strings um?

    Vielen Dank schon mal für die Hilfe



  • const unsigned int KEY_LENGTH = 999;
    
    string str;
    for(int i = 0; i < KEY_LENGTH; ++i)
        str += static_cast<char>(i);
    

    MfG Eisflamme



  • Mis2com schrieb:

    const unsigned int KEY_LENGTH = 999;
    
    string str;
    for(int i = 0; i < KEY_LENGTH; ++i)
        str += static_cast<char>(i);
    

    MfG Eisflamme

    muss man das net so machen:

    str += (char)i%256;
    

    is ja exakt das gleiche??? wo is char grösser als 8 bit?

    cu



  • Gast2211 schrieb:

    Geht das ? Eine Zufallszahl die mehrere Bereiche z.b.1-10 und 500-800 und ..
    hat?

    Für dein Problem fallen mir spontan 2 wege ein:
    1. der mathematische Weg:
    Du führst die ganzen Bereiche zuerst zusammen, berechnest eine Zufallszahl und zerteilst dann die Bereiche wieder (zugegeben, verdammt schlecht erklärt aber ich versuche das mal an einem Beispiel zu erklären).

    Du Hast zwei Bereiche

    1. 1-10 und
    2. 500-800
      dies ergibt zusammen 311 verschiedene möglichkeiten (1-10 = 10 und 500-800 = 301 (einschl. 500)).
      Dann lässt du eine Zufallszahl zwischen 1-311 errechnen und überprüfst dann die Grenzen. Bekommst du eine Zahl zurück die höher als 10 ist musst du 489 dazuzählen um in den zweiten Bereich zu kommen.
      Code erspare ich mir da der wohl auch nicht für mehr durchblick sorgen würde 😃

    2. der String Weg:
    Wie ich finde auch der ellegantere Weg für dein Problem.
    Da du einen String mit zufälligen Zeichen generieren willst kannst du es auch so machen:

    // ...
    
    const int NUMB_OF_CHAR = 10; // Anzahl der erzeugten Zeichen.
    const char val[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        // Hier sind alle Zeichen gespeichert die verwendet werden sollen,
        // da du hier alle Zeichen über den Index ansprechen kannst fällt das aufteilen weg.
    std::string result = ""; // Hier kommt das Ergebnis rein.
    for(int i = 0; i < NUMB_OF_CHAR; i++)
    {
        result += val[rand() % strlen(val)];
    }
    
    // ...
    

    Ich hoffe ich konnte Helfen.
    Gruß Wolle



  • @Wolle: er wollte ja auch zahlen u sonderzeichen haben, da is deine 2 methode nit so geeignet, man müsste da bissal was ändern..

    lg



  • coder. schrieb:

    @Wolle: er wollte ja auch zahlen u sonderzeichen haben, da is deine 2 methode nit so geeignet, man müsste da bissal was ändern..

    lg

    Dann kann er 'val' einfach um '1234567890' und diversen Sonderzeichen erweitern.
    Sollte dann funktionieren.

    mfg
    v R



  • @alle erst einmal danke für die Hilfe
    @wolle Deine Lösung gefällt mir sehr gut ,weil sich sehr leicht bestimmen lässt welche Zeichen man verwenden muss

    Habs jetzt mittlerweile so gelöst
    [cpp]
    int i;
    char abc[512];
    srand(GetTickCount());
    for( i = 0; i < keylength;++i )
    {
    abc[i]=(32+(rand()%95 )) ;

    }
    for( i = keylength; i < 512;++i )
    {
    abc[i]=0 ;

    }
    ergebnis=abc;
    [cpp]
    Dort verwende ich alle ascii-zeichen von 32-127 .
    Die Keylänge soll frei wählbar sein ,deshalb hab ich 512 Plätze im Array reserviert und den Rest mit 0 aufgefüllt.
    Gäbe es da noch ne andere Möglichkeit den Array nur so gross zu machen wie man ihn auch braucht?



  • na entweder du fragst vorher wie groß das sein soll und machst das dann mit ner variablen oder du benutzt nen vector.


Anmelden zum Antworten