zufälliges element aus einem array in c
Wie kann ich wählen Sie ein zufälliges element aus einem Zeichen-array in c ?
Zum Beispiel:
char *array[19];
array[0] = "Hi";
array[1] = "Hello";
etc
Ich bin auf der Suche nach so etwas wie array[rand], rand, wo ist die zufällige ganze Zahl zwischen o und das array die Länge(in diesem Fall 20), wie 1, 2, 3 , 19, usw.
Sie sind auf der Suche nach
vielleicht
Also, klar zu sein,
Verwenden Sie kein
Was @pjs ist refereing, ist dieses Problem aus der linux-man-Seiten: "Die Versionen von rand() und srand() in der Linux C-Bibliothek benutzen den selben Zufallszahlengenerator wie random(3) und srandom(3), so dass die unteren bits werden sollte so zufällig wie die höherwertigen bits. Jedoch, bei älteren rand () - Implementierungen auf aktuellen Implementierungen auf verschiedenen Systemen, die unteren bits sind viel weniger zufällig als die höherwertigen bits. Verwenden Sie diese Funktion nicht im vorgesehenen Anwendungen tragbar sein, wenn die gute Zufälligkeit erforderlich ist. (Random(3) statt.)"
rand()
vielleicht
char* array[20];
Also, klar zu sein,
20 * rand()
ist nicht korrekt. Verwenden rand() % 20
. Allerdings, wenn Ihr array 20 Elemente lang, müssen Sie fixieren Sie Ihre Deklaration von Variablen! Sind Sie nur die Zuteilung von 19 Elemente.Verwenden Sie kein
%
weil die Ergebnisse nicht einheitlich. Die Multiplikation von U(0,1) - Wert mal 20 und Böden geben einen int von 0 bis 19, D. H., 20 Elemente alle zu null-basiertes array-Indizes.Was @pjs ist refereing, ist dieses Problem aus der linux-man-Seiten: "Die Versionen von rand() und srand() in der Linux C-Bibliothek benutzen den selben Zufallszahlengenerator wie random(3) und srandom(3), so dass die unteren bits werden sollte so zufällig wie die höherwertigen bits. Jedoch, bei älteren rand () - Implementierungen auf aktuellen Implementierungen auf verschiedenen Systemen, die unteren bits sind viel weniger zufällig als die höherwertigen bits. Verwenden Sie diese Funktion nicht im vorgesehenen Anwendungen tragbar sein, wenn die gute Zufälligkeit erforderlich ist. (Random(3) statt.)"
InformationsquelleAutor Rrjrjtlokrthjji | 2013-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um Dinge zu beginnen, da Sie ein array von Zeichenfolgen, die keine Zeichen haben, müssen Sie deklarieren es als
char* array[19];
Dann können Sie deklarieren Sie die folgenden (immer nützlich) - makro
#define ARR_SIZE(arr) ( sizeof((arr)) /sizeof((arr[0])) )
Zuletzt, können Sie wählen
arr[rand() % ARR_SIZE(arr)]
(und dabei berücksichtigen, dass die Durchführung%
aufrand()
ist nicht die richtige Art und Weise zu tun, um eine zufällige Zahl in einem Bereich.srand()
, aber bewusst sein, dass immer eine anständige Samen ist eigentlich ziemlich hart. Und diedrand48()
Familie von PRNG Funktion ist ziemlich nützlich, obwohl Sie immer noch die seeding problem.Das ist eine richtige Bemerkung, aber ich bezog mich auf die Frage der Auswahl einer Zufallszahl innerhalb einer Reihe von zahlen in einer Weise zu bleiben gleichmäßig verteilt.
InformationsquelleAutor levengli
% 20
nachgeben können uneinheitliche Ergebnisse.InformationsquelleAutor MOHAMED
Können Sie versuchen, array[rand() % ARRAY_LEN] aber Sie gehen zu bekommen, einen einzigen char und nicht ein
char*
und wenn man das tut, array[0] = "Hallo"; es ist nicht korrekt, da Sie der Zuordnung zu einem einzigen
char
einechar*
oder drehen Sie Ihr
char array[20]
in einechar *array[20]
und Sie können zuweisen einer ZeichenfolgeInformationsquelleAutor Alexis
Was Sie vorschlagen, ist die beste Lösung, die es gibt - wählen Sie einen zufälligen index und benutzen Sie dann das element an diesem index. Wenn Ihre Frage ist, wie man eine zufällige ganze Zahl, verwenden Sie die integrierte Funktion
rand()
.InformationsquelleAutor Ivaylo Strandjev