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();
}
Ö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. –
Bir şans vereceğim ve bilmenizi isterim - yine de sevdim, teşekkürler! – JohnIdol
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). –