2009-03-25 29 views
6

スペースとmixedCaseでランダムな文字列を生成する必要があります。スペースと大文字と小文字が混在するランダムな文字列を取得する方法は?

Thisは、私がこれまでに得たすべてである:

/// <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(); 
     } 
    } 

私はスペースなしでのみ大文字の文字列を取得しています - 私は微調整はかなりスープに混在する場合、スペースを取得するためにstriaghtforwardされなければならないと考えています。

大変助かりました!

答えて

11

これを行う最も簡単な方法は、単純に以下の値で文字列を作成することです。そして、

private readonly string legalCharacters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

、この文字列にランダムな要素にアクセスするためにRNGを使用します。

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(); 
} 
+0

あなたの例がしていることは、65と90(両端を含む)の間のUnicode文字の値を選んでいるため、まったく同じことです。あなたがそれをもっとランダムにしたいのであれば(あなたが望むことを定義する)、.NETが提供するよりも "より良い" PRNGが必要になります。 –

+0

私はそれを打つとあなたに知らせる - 私はとにかく、ありがとう! – JohnIdol

+0

ランダム化を2回繰り返すことで、ランダム化されることはありません。文字列内のすべての文字が等確率で表示されるようにするには、これは良いオプションです。 (ただし、legalCharactersにスペース文字を追加する必要があり、1/2809の確率で2つの連続するスペースが得られます)。 –

1

あなたは可能性がありあなたが許可するすべての文字の配列から始めてください。

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

そして:

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

    ... 

    return builder.ToString(); 
} 

return builder.ToString(); 

私は言い換えれば当然です。私はrandom.NextInt()の構文については確信していませんが、intelisenseは助けなければなりません。

0

Lorem Ipsumを使用することもできます。これは、デザイン要素からユーザーを邪魔することなく、ランダムで現実的なテキストを埋め込むためにグラフィックデザイン業界で広く使用されています。

Lorem Ipsumの大きな塊をコード内の定数文字列にコピー&ペーストし、必要なサイズに部分文字列を付けることができます。

これは、あまりにも気を散らすので、これは完全にランダムなテキストを持つよりも優れていることがわかりました。

希望に役立ちます。

+0

に切り替えます。しかし、私はそれがランダムな文字列の集団を生成する必要があります遺伝的アルゴリズムによって標的文字列に進化した – JohnIdol

関連する問題