Zufällige Ausgabe mit "strings"?
-
Hallo,
Mit rand(); ist es ja so, das nur zufällige Zahlen ausgegeben werden kann. Wie erreiche ich das mit Strings? Also ich möchte ein Programm schreiben, dass mir zufällig vordefinierte strings in der Console ausgibt. Ich komme einfach nicht darauf. Also bitte so erklären damit das auch ein Laie verstehen kann.
Danke
A.N.
-
Einen Array anlegen, der die Strings enthält, per Random eine Zahl bestimmen, diese Zahl als Index benutzen, und dann das Array ausgeben lassen.
Mfg Ominion
-
indem du ueber einen zufallsindex auf einen mit vordefinierten strings zugreifst.
oder du dir sowas zurech bastelst:
#define RNDSTRLEN 10 static char rndStr[RNDSTRLEN]; char* RndStr() { int len=1+rand()%RNDSTRLEN; int i=0; while (i!=len) rndStr[i++]=(rand()%26)+'a'; rndStr[i]='\0'; return rndStr; }
-
Hach ich wusste doch da war doch irgend was mit Arrays!
Danke!

-
Mach dir ein Array und speichere darin de strings dan kannste einfach mit rand() wieder eine zufallszahl erzeugen und mit der dann den string abrufen.
Bsp:std::string strings[100]; std::zufallsstring = Strings[rand()100];
-
Damit wir uns nict missverstehen, es geht also um einen Satz als vordefinierter String! Beispiel:
string frage1 = {"Das ist die Frage Nummer 1"};
string frage2 = {"Das ist die Frage Nummer 2"};... bis Frage 4 und davon sollen zufällig eines der vier Fragen ausgegeben werden. Das meinte ich. Geht das mit Arrays?
-
und nun erwartest du eine komplettloesung oder wo ist das problem?
es wurde doch nun wirklich mehrfach gesagt wie es geht -sogar mit beispiel
(wobei da noch ein % zwischen rand() und 100 fehlt)
-
Ja ist ja schon gut Meister.
-
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!