Выберите случайный char

У меня есть несколько символов:

chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

теперь я ищу способ вернуть случайный char из них.

Я нашел код, который может быть полезен:

static Random random = new Random();
        public static char GetLetter()
        {
            // This method returns a random lowercase letter
            // ... Between 'a' and 'z' inclusize.
            int num = random.Next(0, 26); // Zero to 25
            char let = (char)('a' + num);
            return let;
        }

этот код возвращает мне случайную char форму алфавита, но возвращает только строчные буквы

Ответ 1

Ну, вы почти готовы - вы хотите вернуть случайный элемент из строки, поэтому вы просто генерируете случайное число в диапазоне длины строки:

public static char GetRandomCharacter(string text, Random rng)
{
    int index = rng.Next(text.Length);
    return text[index];
}

Я бы посоветовал использовать переменную static типа Random без какой-либо блокировки, кстати - Random не является потокобезопасным. Более подробную информацию (и обходные пути) см. В статье по случайным номерам.

Ответ 2

Это может сработать для вас:

public static char GetLetter()
{
    string chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
    Random rand = new Random();
    int num = rand.Next(0, chars.Length -1);
    return chars[num];
}

Ответ 3

Вы можете использовать его как:

char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
Random r = new Random();
int i = r.Next(chars.Length);
Console.WriteLine(chars[i]);

Вот DEMO.

Ответ 4

Вместо 26 используйте размер своего буфера CHARS.

int num = random.Next(0, chars.Length)

Тогда вместо

let = (char)('a' + num)

использование

let = chars[num]

Ответ 5

У меня была приблизительная проблема, и я сделал это следующим образом:

public static String GetRandomString()
{
    var allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
    var length = 15;

    var chars = new char[length];
    var rd = new Random();

    for (var i = 0; i < length; i++)
    {
        chars[i] = allowedChars[rd.Next(0, allowedChars.Length)];
    }

    return new String(chars);
}

Ответ 6

private static void Main(string[] args)
        {
            Console.WriteLine(GetLetters(6));
            Console.ReadLine();
        }

        public static string GetLetters(int numberOfCharsToGenerate)
        {
            var random = new Random();
            char[] chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();

            var sb = new StringBuilder();
            for (int i = 0; i < numberOfCharsToGenerate; i++)
            {
                int num = random.Next(0, chars.Length);
                sb.Append(chars[num]);
            }
            return sb.ToString();
        }

Ответ 7

Я хочу Этот код поможет вам:

 string s = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
            Random random = new Random();
            int num = random.Next(0, s.Length -1);
            MessageBox.Show(s[num].ToString());

Ответ 8

Получение символа из ASCII-номера:

private string GenerateRandomString()
{
Random rnd = new Random();
string txtRand = string.Empty;
for (int i = 0; i <8; i++) txtRand += ((char)rnd.Next(97, 122)).ToString();
return txtRand;
}

Ответ 9

Я не уверен, насколько это эффективно, поскольку я очень плохо знаком с кодированием, однако, почему бы просто не использовать случайное число, которое вы уже создали? Разве это не "рандомизирует" и заглавные буквы?

    int num = random.Next(0,26);           
    char let = (num > 13) ? Char.ToUpper((char)('a' + num)) : (char)('a' + num);

Кроме того, если вы хотите взять одну букву из вашего символа [], будет проще использовать строку?

    string charRepo = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&"; 
    Random rando = new Random();
    int ranNum = rando.Next(0, charRepo.Length);

    char ranChar = charRepo[ranNum];

Ответ 10

Вы можете попробовать следующее:

 public static string GetPassword()
 {
string Characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 Random rnd = new Random();
int index = rnd.Next(0,51);
string char1 = Characters[index].ToString();
return char1;
  }

Теперь вы можете играть с этим блоком кода согласно вашему желанию. Ура!

Ответ 11

Ваш код в порядке, вам просто нужно изменить "а" на "А"

static Random random = new Random();
        public static char GetLetter()
        {
            // This method returns a random lowercase letter
            // ... Between 'a' and 'z' inclusize.
            int num = random.Next(0, 26); // Zero to 25
            char let = (char)('A' + num);
            return let;
        } 

Этот код такой же, как упоминалось в вопросе, просто измените char let = (char)('A' + num);, он возвращает заглавные буквы.

Спасибо!!!