0

文字と整数を区別しなければならない問題がSWAPあります。move私はどんなキャラクターも持っているようにA。今、私はいくつかのケースを持っています

注:- 文字A-Zと整数を使用する必要があります0-9

  1. A、プログラムを実行するときに、この文字に整数値を割り当てたいと思います。値3をこの文字に割り当てると、3か所に移動AするDか、3か所に移動します。

  2. のような文字がYあり、4 を追加すると、再び文字から開始されたC後に手段になります。ZA

  3. 9 があり、それに 3 を代入する場合、Integer で同じ条件に従う必要があります。ループは 1 からではなく 0 から開始されるため、2 になります。つまり、0 ~ 9 の整数のみを使用する必要があります。

質問に間違った名前を使用していることは知っていますが、その種の質問にどの行を使用する必要があるかわかりません。

私の問題を理解してください。

前もって感謝します。

4

4 に答える 4

1

あなたが持っている別の選択肢は、あなたが望む順序に従う組み込みのcharacter/タイプに頼ることです。integer追加の考慮事項: キャップを考慮すると、キャップが配信されます (「A」の後の「B」と「a」の後の「b」)。心配する必要があるのは、反復が AZ/0-9 境界に制限されるようにすることだけです。サンプルコード:

public string moveChar(string inputChar, int noPos)
{
    string outChar = checkBoundaries(inputChar, noPos);

    if (outChar == "")
    {
        outChar = basicConversion(inputChar, noPos);
    }

    return outChar;
}

public string basicConversion(string inputChar, int noPos)
{
    return Convert.ToString(Convert.ToChar(Convert.ToInt32(Convert.ToChar(inputChar)) + noPos));
}

public string checkBoundaries(string inputChar, int noPos)
{
    string outString = "";

    int count1 = 0;
    do
    {
        count1 = count1 + 1;
        string curTemp = basicConversion(inputChar, 1);
        if (inputChar.ToLower() == "z" || curTemp.ToLower() == "z")
        {
            if (inputChar.ToLower() != "z")
            {
                noPos = noPos - count1;
            }

            inputChar = "a";
            outString = "a";
            if (inputChar == "Z" || curTemp == "Z")
            {
                inputChar = "A";
                outString = "A";
            }

            count1 = 1;
        }
        else if (inputChar == "9" || curTemp == "9")
        {
            if (inputChar != "9")
            {
                noPos = noPos - count1;
            }

            inputChar = "0";
            outString = "0";

            count1 = 1;
        }
        else
        {
            inputChar = curTemp;
            outString = inputChar;
        }
    } while (count1 < noPos);

    return outString;
}

文字列 (呼び出しごとに 1 文字 (文字または数字) のみ) を想定しており、次を使用して簡単に呼び出すことができますmoveChar("current letter or number", no_of_pos_to_move)。このバージョンは「ポジティブ」/「フォワード」の動きだけを説明していますが、逆の状況を説明するために簡単に編集できます.

于 2013-07-24T09:14:28.620 に答える
0

Caesar 暗号は、次のように簡単にすることができます。

static char Encrypt(char ch, int code)
{
    if (!char.IsLetter(ch))
    {
        return ch;
    }
    char offset = char.IsUpper(ch) ? 'A' : 'a';
    return (char)(((ch + code - offset) % 26) + offset);
}

static string Encrypt(string input, int code)
{
    return new string(input.ToCharArray().Select(ch => Encrypt(ch, code)).ToArray());
}

static string Decrypt(string input, int code)
{
    return Encrypt(input, 26 - code);
}

const string TestCase = "Pack my box with five dozen liquor jugs.";

static void Main()
{
    string str = TestCase;

    Console.WriteLine(str);
    str = Encrypt(str, 5);
    Console.WriteLine("Encrypted: {0}", str);
    str = Decrypt(str, 5);
    Console.WriteLine("Decrypted: {0}", str);
    Console.ReadKey();
}
于 2013-09-24T15:23:45.863 に答える