C#: Random String aus vordefinierten Zeichen
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
code
cool danke
durchlauf
erzeugen
generator
gleiche zeichen
jemand
objekt
perfekt danke
problem
schleife
sequenz
speichern
string
suche
tick
ticks
url
versuch
zufallsgenerator
-
Hallo!
Ich suche jetzt schon ewig aber finde leider nichts passendes...
Könnte mir vielleicht jemand folgenden PHP-Code in C# übersetzen :
mt_srand(crc32(microtime())); $char_layer = "!§%&/=?*:;,.-_#+*~<>@€"; $str_lng = strlen($char_layer)-1; $rand= ""; for($i=0;$i<35;$i++) { $rand .= $char_layer{mt_rand(0, $str_lng)}; }
Wäre echt super.... Danke im Voraus!
Edit: Großteils bekomme ich es eh hin, nur ich scheitere am auswählen eines zufälligen Zeichens aus dem String...
Edit2:
Ich bin ein kleines Bisschen weiter..
char[] charArr = { '&', '$', '/', '!', '§', '%', '=', '?', '<', '>', '|', '-', '_', '#', '+' }; String x = ""; for (int i = 0; i < 10; i++) { Random rnd = new Random(); int Z = rnd.Next(0, 14); x += charArr[Z]; } Console.WriteLine(x); Console.ReadKey();
Jetzt hab ich nur das Problem, dass aus irgendwelchen Gründen 10 Mal das gleiche Zeichen ausgegeben wird...
Beitrag zuletzt geändert: 7.7.2012 1:14:28 von yorecords -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo yorecords,
einen Mersenne Twister habe ich zwar nicht im Angebot, aber ich hoffe mal, dass es so auch geht:
public static void Main(string[] args) { string char_layer = "!§%&/=?*:;,.-_#+*~<>@€"; string result = ""; Random rnd = new Random((int)DateTime.Now.Ticks); for(int i = 0; i<35; i++) { result += char_layer.Substring(rnd.Next(0,char_layer.Length),1); } Console.WriteLine(result); Console.ReadLine(); }
-
darkpandemic schrieb:
Hallo yorecords,
einen Mersenne Twister habe ich zwar nicht im Angebot, aber ich hoffe mal, dass es so auch geht:
public static void Main(string[] args) { string char_layer = "!§%&/=?*:;,.-_#+*~<>@€"; string result = ""; Random rnd = new Random((int)DateTime.Now.Ticks); for(int i = 0; i<35; i++) { result += char_layer.Substring(rnd.Next(0,char_layer.Length),1); } Console.WriteLine(result); Console.ReadLine(); }
Oh.. Hab deine Antwort nicht gesehen..
Cool, danke. Ich versuch es gleich mal.
Edit:
PERFEKT!! Vielen Dank!
Aber weißt du zufällig wieso meine Idee nicht funktioniert hat?
Beitrag zuletzt geändert: 7.7.2012 1:20:08 von yorecords -
darkpandemic schrieb:
Hallo yorecords,
Du darfst den Zufallsgenerator nicht in der Schleife erzeugen. Dann hast Du in jedem Schleifendurchlauf einen neuen Generator und der startet auch immer mit dem gleichen Wert. Deswegen bekommst Du immer das gleiche Zeichen.
Aaaah... Perfekt, danke!! -
Ich möchte dafür kein eigenes Thema machen...würde es reichen, wenn man den Zufallsgenerator beim Durchlauf seeden würde?
Also mit
Random rnd = new Random((int)DateTime.Now.Ticks); -
algorithmpalace schrieb:
würde es reichen, wenn man den Zufallsgenerator beim Durchlauf seeden würde?
Wie meinst du das? -
Hallo algorithmpalace,
ein Tick ist zwar nur 100ns aber wenn man Pech hat, dann wird der Zufallsgenerator mehrfach mit dem selben Wert geseedet. Das würde dann auch wieder zu Sequenzen gleicher Zeichen führen. Desweiteren ist es nicht sehr effizient in jedem Schleifendurchlauf ein neues Random Objekt zu erstellen. Schließlich muss jedesmal neuer Speicher für das Objekt angelegt und der Konstruktor ausgeführt werden. -
Das war genau das Problem das ich bei meinem Lösungsansatz oben hatte...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage