kostenloser Webspace werbefrei: lima-city


C#: Random String aus vordefinierten Zeichen

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    Hallo!

    Ich suche jetzt schon ewig aber finde leider nichts passendes...

    Könnte mir vielleicht jemand folgenden PHP-Code in C# übersetzen :wink::

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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();
    }
  4. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    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! :smile:

    Aber weißt du zufällig wieso meine Idee nicht funktioniert hat?

    Beitrag zuletzt geändert: 7.7.2012 1:20:08 von yorecords
  5. 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.
  6. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    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... :smile: Perfekt, danke!!
  7. algorithmpalace

    algorithmpalace hat kostenlosen Webspace.

    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);
  8. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    algorithmpalace schrieb:
    würde es reichen, wenn man den Zufallsgenerator beim Durchlauf seeden würde?


    Wie meinst du das?
  9. 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.
  10. Autor dieses Themas

    yorecords

    Kostenloser Webspace von yorecords

    yorecords hat kostenlosen Webspace.

    Das war genau das Problem das ich bei meinem Lösungsansatz oben hatte...
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!