Zufallstext erzeugen , aber wie :(
-
hallo,
ich möchte gern wissen ,wie man ein Zufallstext mit einer Länger vom 5 bis 30 Buchstaben ausgeben kann.
ich weiß nur, mitint *pi, i[11]; pd = d; pi = i; randomize(); do{ *pi = random(201)-100; pi++; cout<< *pi <<endl; } while(pi <= &i[10]);bekomme ich 11 Zufallstzahl , aber selbst hier stimmt irgendwas nicht . wenn ich richtig verstanden habe ,muss das Programm nur die Zahl zwischen -100 und +100 ausgeben . Es gibt manchmal auch 7 stelligen Zahl aus , wo habe ich ein Fehler gemacht ?
ich werde mich um jede Hilfe freuen
.
mfG.
-
Das ist verwirrend, daß Du erst mit pi++; weitergehst und dann mit
cout<< *pi <<endl; den nächsten noch unbesetztzen wert ausgibst.
-
http://www.c-plusplus.net/forum/viewtopic-var-p-is-227978.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html
-
Du solltest aber besser String verwenden, ist sicherer... Oder gleich std::vector :p
Oder du forderst neuen Speicher an, der ist auch "zufällig" belegt...
Im Übrigen müsste das einen Bufer-Overflow geben, da du für p nie Speicher reservierst.
Du könntest höchstens so probieren:
char*p=new char[30]; for(i=0;i<30;i++) { char c=reinterpret_cast<char>(random()); p[i]=c; } //... delete p;
-
DarkShadow44 schrieb:
Oder du forderst neuen Speicher an, der ist auch "zufällig" belegt...
undefiniert =/= zufällig
-
DarkShadow44 schrieb:
Im Übrigen müsste das einen Bufer-Overflow geben, da du für p nie Speicher reservierst.
Seit wann gibt es einen Buffer-Overflow, wenn man keinen Speicher reserviert? Es gibt einfach undefiniertes Verhalten, was auch immer dies sein wird. Es ist halt undefiniert.
Im übrigen zu deinem Quellcode:
// Brauchen wir später: char const* alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789,. -"; int const alphabetLength = std::strlen(alphabet); //char*p=new char[30]; // Wieso per new Speicher holen und dann noch eine konstante kleine Menge? // Lieber so: char buffer[30]; for(i = 0; i < 30; ++i) { //char c=reinterpret_cast<char>(random()); // Dafür verwendet man static_cast und wieso die Zwischenvariable? // buffer[i] = static_cast<char>(random()); // Allerdings ergibt das immer noch eine Menge unsinniger nicht druckbarer Zeichen. // Daher vielleicht besser so: buffer[i] = alphabet[rand() % alphabetLength]; } // Nicht mehr nötig: // delete p;Grüssli
-
Ich würde wohl eine zufällige Zahl in ein char setzen und in ein stringstream packen.
-
@Volkard,
Was soll denn der Edit? Wieso löschst du meinen ganzen Beitrag?Grüssli
-
Dravere schrieb:
@Volkard,
Was soll denn der Edit? Wieso löschst du meinen ganzen Beitrag?Grüssli
Ups, das tut mir sehr leid. Hab den falschen Button erwischt. Ich wollte nur Quote drücken und nicht Edit.
Hast Du den Code noch? Dann poste ihn doch bitte nochmal.
Sorry.
-
volkard schrieb:
Dravere schrieb:
@Volkard,
Was soll denn der Edit? Wieso löschst du meinen ganzen Beitrag?Grüssli
Ups, das tut mir sehr leid. Hab den falschen Button erwischt. Ich wollte nur Quote drücken und nicht Edit.
Hast Du den Code noch? Dann poste ihn doch bitte nochmal.
Sorry.Hab ihn in der History wiedergefunden. Was mein Browser so alles speichert

volkard schrieb:
Dravere schrieb:
int const alphabetLength = std::strlen(alphabet);Da würde ich sogar sizeof verwenden.
Ehm, aber sag mal, wie soll das über
sizeofgehen? Ist ja nur ein Zeiger. Und wenn der Kompiler klug ist, kann er das prima wegoptimieren.Grüssli
-
Geht gar nicht.
Ich habechar const* alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789,. -";gesehen, aber
static char const alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789,. -";gelesen.
-
Das "new" war dafür gedacht, die Länge des Zufallsstrings variabel zu halten, also zur Laufzeit änderbar.

Zwischenvariablen verwende ich zum Debuggen gern
Und das mit dem "buffer[i]=random()" war nur als Beispiel gedacht.