2009-03-25 17 views
6

Necesito generar una cadena aleatoria con espacios y mixedCase.¿Cómo obtener cadenas aleatorias con espacios y mayúsculas y minúsculas?

This es todo lo que tengo hasta ahora:

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

estoy recibiendo sólo cadenas en mayúsculas, sin espacios - Creo que el truco debe ser bastante striaghtforward para obtener mayúsculas y minúsculas y espacios en la sopa.

Cualquier ayuda muy apreciada!

Respuesta

11

La forma más sencilla de hacer esto es simplemente crear una cadena con los siguientes valores:

private readonly string legalCharacters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

continuación, utilizar el generador de números aleatorios para acceder a un elemento de azar en esta cadena:

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

Lo que hace su ejemplo es exactamente lo mismo que lo que hago porque está eligiendo un valor de carácter Unicode entre 65 y 90 (inclusive). Si lo quiere incluso "más aleatorio" (defina que como quiera), necesitará un PRNG "mejor" del que proporciona .NET. –

+0

Le daré una oportunidad y le haré saber que me gusta, de todos modos, ¡gracias! – JohnIdol

+0

Nada se vuelve más aleatorio aleatorizando dos veces. Esta es una buena opción si quieres que todos los personajes de la cadena aparezcan con la misma probabilidad. (Pero necesita agregar el carácter de espacio a legalCharacters, y obtendrá dos espacios consecutivos con 1/2809 de probabilidad). –

1

Usted podría comience con una matriz de todos los caracteres que permitirá

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

Y luego:

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

    ... 

    return builder.ToString(); 
} 

return builder.ToString(); 

Parafraseo, por supuesto. No estoy seguro acerca de la sintaxis en random.NextInt(), pero intelisense para ayudar.

0

También puede usar Lorem Ipsum. Es ampliamente utilizado en la industria del diseño gráfico para rellenar textos aleatorios y realistas sin distraer al usuario de los elementos de diseño.

Puede copiar y pegar una gran parte del Lorem Ipsum en una cadena constante en su código y luego subscribirlo en cualquier tamaño que necesite.

Encontré que esto era mejor que tener texto completamente aleatorio ya que era demasiado molesto.

Espero que ayude.

+0

gracias, pero lo necesito para generar una población de cadenas aleatorias para ser evolucionado en una cadena objetivo por un algoritmo genético – JohnIdol

Cuestiones relacionadas