24

私はいくつかの文字を持っています:

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

今、私はこれらからランダムな文字を返すメソッドを探しています。

私はおそらく役に立つかもしれないコードを見つけました:

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;
        }

このコードはアルファベットからランダムな文字を返しますが、小文字のみを返します

4

11 に答える 11

39

さて、あなたはもうすぐそこにいます-文字列からランダムな要素を返したいので、文字列の長さの範囲で乱数を生成するだけです:

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

ちなみに、ロックなしでタイプの変数を使用しないことをお勧めます-スレッドセーフではありません。詳細 (および回避策) については、乱数に関する私の記事を参照してください。staticRandomRandom

于 2013-03-06T13:54:27.543 に答える
13

これはあなたのために働くかもしれません:

public static char GetLetter()
{
    string chars = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
    Random rand = new Random();
    int num = rand.Next(0, chars.Length);
    return chars[num];
}
于 2013-03-06T14:00:18.660 に答える
5

あなたはそれを次のように使うことができます。

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

これがDEMOです。

于 2013-03-06T13:56:26.870 に答える
3

私はおおよその問題を抱えていました、そして私はこの方法でそれをしました:

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);
}
于 2013-03-06T13:59:29.783 に答える
3

26 の代わりに、CHARS バッファーのサイズを使用してください。

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

次に、代わりに

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

使用する

let = chars[num]
于 2013-03-06T13:58:47.770 に答える
3

私はコーディングに非常に慣れていないので、それがどれほど効率的かはわかりませんが、すでに作成している乱数を利用してみませんか? これは大文字の文字も「ランダム化」しませんか?

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

また、char[] から単一の文字を取得する場合は、文字列を使用する方が簡単でしょうか?

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

    char ranChar = charRepo[ranNum];
于 2018-06-22T13:19:47.220 に答える
2
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();
        }
于 2013-03-06T13:54:53.600 に答える
1

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;
}
于 2016-04-28T00:22:07.000 に答える
1

私はこのコードがあなたを助けることを望みます:

 string s = "$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&";
            Random random = new Random();
            int num = random.Next(0, s.Length -1);
            MessageBox.Show(s[num].ToString());
于 2013-03-06T13:58:56.317 に答える