Zufallsauwahl aus bestimmten Zeichen



  • Hi ich suche eine Möglichkeit einen String zufällig mit den Zeichen "1234567890ABCDEF" also den Hexadezimal-System zu füllen wie würde man so etwas implementieren? Sorry für die saublöde Frage, bin halt noch Anfänger 😞 ...

    Danke im Vorraus, Riessi



  • petejacobx schrieb:

    Hi ich suche eine Möglichkeit einen String zufällig mit den Zeichen "1234567890ABCDEF" also den Hexadezimal-System zu füllen wie würde man so etwas implementieren? Sorry für die saublöde Frage, bin halt noch Anfänger 😞 ...

    Danke im v******, Riessi

    //#include <cstdlib>//für rand
    //#include <ctime>//für time
    //am anfang der main() wäre srand(time(0)) fein
    
    #include <string>//für string
    #include <iostream>//für cout
    using namespace std;//um nicht immer std:: zu schreiben
    
    static char digits[16]="0123456789ABCDEF";
    strint result;
    for(int i=0;i<len;++i)
       int r=rand()%16;
       result+=digits[r];
    cout<<result;
    


  • Hallo,

    Ansatz: (Ungetestet)

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    int main()
    {
           const string hex_arr("0123456789ABCDEF");
           string str;
           unsigned int str_len = 10; // Länge des Strings str.
           srand(time(0)); // Samen mit aktueller Zeit initalisieren
    
           for(unsigned int i = 0; i < str_len; ++i)
                 str += hex_arr[rand() % 16];
    
           cout << "\n str: " << str << '\n';
           return 0;
    }
    

    btw. Voraus schreibt man immernoch mit einem 'r' 😉

    Caipi



  • Danke Caipi noch ein kleiner Fix sonst gibts Errors:

    cout << "\n str: " << str.c_str() << '\n';
    

    aWR(am Weges Rande): aus Rächtschreibuhng mach isch mir nichtz!



  • petejacobx schrieb:

    Danke Caipi noch ein kleiner Fix sonst gibts Errors:

    cout << "\n str: " << str.c_str() << '\n';
    

    Was für Fehler?
    Der Operator << ist normalerweise auch für die Klasse std::string überladen.
    Welchen Compiler verwendest du?

    Caipi



  • Ich hab MSVC 6... kenn mich mit dem Compiler-Zeug net so aus auf jeden Fall gehts mit meiner Methode ansonsten gibts den Fehler:

    myfile.cpp(17) : error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string
    <char,struct std::char_traits<char>,class std::allocator<char> >' akzeptiert (oder keine geeignete Konvertierung moeglich)
    

    Das hab ich dann bei google reingehackt und das problem so gelöst, wie könnte man des noch fixen (Kompilereinstellungen oder so?)

    pete



  • petejacobx schrieb:

    aWR(am Weges Rande): aus Rächtschreibuhng mach isch mir nichtz!

    Naja, das solltest du aber spätestens dann,wenn keiner mehr erkennen kann was du sagen/fragen willst....
    btw
    bei mir(gcc 3.x) compiliert der Code auch mit std::string einwandfrei; aber das wurde ja auch erwartet



  • im Stroustrup steht, dass es den Operator gibt:
    basic_ostream<Ch,Tr>& operator<< (basic_ostream<Ch,Tr>&, const basic_string<Ch,Tr,A>&);

    cout ist vom Typ ostream (was gleichbedeutend ist mit basic_ostream<char, std::char_traits<char> >)
    und string ist ein typedef für std::basic_string
    <char,std::char_traits<char>,std::allocator<char> >

    Muss also passen...



  • egal. Ich hab mir jetzt auch mingw + gcc geholt da läufts einwandfrei in der original version durch. Danke trotzdem.



  • petejacobx schrieb:

    egal. Ich hab mir jetzt auch mingw + gcc geholt da läufts einwandfrei in der original version durch. Danke trotzdem.

    den benutzt der poster auch

    edit: oder sowas

    #include <sstream>
    #include <iostream>
    using namespace std;
    
    int main() 
    { 
        srand(time(0));
        stringstream ss;
        ss << hex;
        for (int s=0; s<100; s++)
            ss << rand()%16;
        cout << ss.str() << endl;
        cin.get();
    }
    

Anmelden zum Antworten