0

さまざまな文字の長さを生成するランダムな「パスワード」ジェネレーターを作成したいと考えています。長さを入力すると、長さがランダムな文字になります。また、ランダムな文字を大文字にしたいと思います。1 または 2 の変数 rndCap があります。if は、rndCap == 2 の場合は大文字に変換し、そうでない場合は何もしません。答えは、すべての文字を組み合わせたものです。実行すると、数字はすべて小文字になります。文字をランダムに大文字にすることを除いて、すべてが機能します。

Random rnd = new Random();

string[] alphabet = new string[27];

alphabet[1] = "a";
alphabet[2] = "b";
alphabet[3] = "c";
alphabet[4] = "d";
alphabet[5] = "e";
alphabet[6] = "f";
alphabet[7] = "g";
alphabet[8] = "h";
alphabet[9] = "i";
alphabet[10] = "j";
alphabet[11] = "k";
alphabet[12] = "l";
alphabet[13] = "m";
alphabet[14] = "n";
alphabet[15] = "o";
alphabet[16] = "p";
alphabet[17] = "q";
alphabet[18] = "r";
alphabet[19] = "s";
alphabet[20] = "t";
alphabet[21] = "u";
alphabet[22] = "v";
alphabet[23] = "w";
alphabet[24] = "x";
alphabet[25] = "y";
alphabet[26] = "z";

string answer = "";
int length = Convert.ToInt32(lengthTextBox.Text);
int rndCap;
int rndLetter;

for (int i = 1; i <= length; i++)
{
    rndCap = rnd.Next(1, 3);
    rndLetter = rnd.Next(1, 27);
    string tempMem = alphabet[rndLetter];

    if (rndCap == 2)
    {
        tempMem.ToUpper();
    }
    answer = answer + tempMem;
}

passwordTextBox.Text = answer;
4

7 に答える 7

10

IFが機能していると確信しています:)

String.ToUpper()ただし、手元の文字列を大文字に変更するのではなく、結果として返します。値を割り当てる必要があります。あなたが望んでいたのはおそらくこれです:

tempMem = tempMem.ToUpper();

また、従うべきルール:エンコーディング、カルチャ、およびロケールが現在のものと異なる可能性があることを常に心に留めておいて ください。

この場合、「無害に見える」ASCII 文字のみを使用していますが、大文字の文字列を使用してこれを実践に変換するには、次のようにします。

Jeppe が指摘したように: トルコ語のロケールでは、i は I とは異なる文字に大文字化され、望ましくない結果が生じます。

于 2013-09-06T20:43:21.770 に答える
3

文字列immutableなので、もう一度割り当てる必要があります

tempMem = tempMem.ToUpper();
于 2013-09-06T20:43:24.533 に答える
1

ToUpper を呼び出しますが、値を割り当てません。

tempMem = tempMem.ToUpper()

たぶん、このコードは一般的によりエレガントです:

    static void Main(string[] args)
    {
        Random cRandom = new Random(DateTime.Now.Millisecond);

        string answer = "";
        int length = Convert.ToInt32(6);
        int rndCap;
        int rndLetter;

        for (int i = 1; i <= length; i++)
        {

            rndCap = cRandom.Next(1, 3);

            rndLetter = cRandom.Next(0, 26);

            char tempMem = (char)('a' + rndLetter);
            string c2 = tempMem.ToString();
            if (rndCap == 2)
            {

               c2 = tempMem.ToString().ToUpper();

            }

            answer = answer + c2;

        }
        Console.WriteLine(answer);
        Console.ReadLine();
    }
于 2013-09-06T20:46:17.273 に答える
0

これを使って:

tempMem = tempMem.ToUpper();

は、呼び出された文字列を大文字にしToUpper()ないため、この文字列のコピーをすべての文字を大文字にして返します。

于 2013-09-06T20:43:37.470 に答える
0

ToUpper()は大文字の文字列を返すメソッドであるため、その値に tempMem の値を割り当てる必要があります。

tempMem = tempMem.ToUpper();
于 2013-09-06T20:44:55.860 に答える