2009-03-25 16 views
6

Boşluklu ve mixedCase ile rastgele bir dize oluşturmaya ihtiyacım var. Ben çimdik çorba karışık durumda ve boşluk almak oldukça striaghtforward olması gerektiğine inanıyoruz - Ben boşluk olmadan sadece büyük harf dizeleri alıyorumBoşluk ve karışık durumlarla rasgele dize nasıl alınır?

/// <summary> 
    /// The Typing monkey generates random strings - can't be static 'cause it's a monkey. 
    /// </summary> 
    /// <remarks> 
    /// If you wait long enough it will eventually produce Shakespeare. 
    /// </remarks> 
    class TypingMonkey 
    { 
     /// <summary> 
     /// The Typing Monkey Generates a random string with the given length. 
     /// </summary> 
     /// <param name="size">Size of the string</param> 
     /// <returns>Random string</returns> 
     public string TypeAway(int size) 
     { 
      StringBuilder builder = new StringBuilder(); 
      Random random = new Random(); 
      char ch; 

      for (int i = 0; i < size; i++) 
      { 
       ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); 
       builder.Append(ch); 
      } 

      return builder.ToString(); 
     } 
    } 

:

This Defa var hepsi bu.

Herhangi bir yardım büyük beğeni topladı!

private readonly string legalCharacters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

O zaman bu dizede rastgele eleman erişmek için RNG kullanın:

public string TypeAway(int size) 
{ 
    StringBuilder builder = new StringBuilder(); 
    Random random = new Random(); 
    char ch; 

    for (int i = 0; i < size; i++) 
    { 
     ch = legalCharacters[random.Next(0, legalCharacters.Length)]; 
     builder.Append(ch); 
    } 

    return builder.ToString(); 
} 

cevap

11

Bunu yapmanın en kolay yolu, basitçe aşağıdaki değerlerle bir dize yaratmaktır

private static readonly char[] ALLOWED = new [] { 'a', 'b', 'c' ... '9' }; 

İzin vereceğiniz tüm karakterlerden oluşan bir dizi ile başlayın:

{ 
    ... 
    for (int i = 0; i < size; i++) 
    { 
     ch = ALLOWED[random.NextInt(0, ALLOWED.Length)]; 
     builder.Append(ch); 
    } 

    ... 

    return builder.ToString(); 
} 

return builder.ToString(); 

Elbette, açıklayıcıyım. Random.NextInt() 'daki sözdizimden emin değilim, ama intelisense yardım etmeye çalıştı.

+0

Örneğiniz tam olarak yaptığım şeyle aynı şeydir, çünkü Unicode karakter değeri 65 ile 90 (dahil) arasındadır. Hatta "daha rasgele" olmasını istiyorsanız (bunu istediğinizi tanımlayın), NET'in sağladığıdan daha iyi bir PRNG'ye ihtiyacınız olacak. –

+0

Bir şans vereceğim ve bilmenizi isterim - yine de sevdim, teşekkürler! – JohnIdol

+0

Hiçbir şey iki kere rasgele hale getirilerek daha rasgele olmaz. Bu, dizedeki her karakterin eşit olasılıkla görünmesini istiyorsanız iyi bir seçenektir. (Ama uzay karakterini legalCharacters'a eklemeniz gerekir ve 1/2809 olasılıkla iki ardışık alan elde edersiniz). –

0

Lorem Ipsum'u da kullanabilirsiniz. Grafik tasarım endüstrisinde, kullanıcıyı tasarım elemanlarından rahatsız etmeden rastgele ve gerçekçi bir metin için kullanılır.

Lorem Ipsum'un büyük bir parçasını kodunuzdaki sabit bir dizeye kopyalayıp yapıştırabilir ve daha sonra ihtiyacınız olan boyutlara sığdırabilirsiniz.

Bunun çok dikkat dağıtıcı olduğundan, tamamen rastgele metinlerden daha iyi olduğunu buldum.

Bu yardımcı olur umarım.

+0

Olumlu bir popülasyon oluşturmak için ona ihtiyacım var. Bir genetik algoritma ile hedef dizgeye dönüştü – JohnIdol