0

これは、ASCII値を13ずつインクリメントする私のC#コードです

int a = Convert.ToInt32('z');
            for (int i = 0; i < 13; i++)
            {
                if (a > 96 && a < 122)
                {
                    a++;
                }
                else
                {
                    a = 97;
                }

            }
            string c = Convert.ToChar(a).ToString();

したがって、これmz+13 for ループを回避する任意の方法を出力します。

基本的に私はROT-13を実装しようとしています

4

5 に答える 5

2

最初の答え

もちろんa += 13;、現在 for ループを実行している場所で実行することもできます。

しかし、これはさらに短縮できます。

char c = 'a';
if (c >= 'a' && c <= 'z') {
    c = (char)(((int)c)+13);
}

アップデート

あなたの更新された質問では、次のようにできると思います:

char c = 'z';
c = (char)(((int)'a') + ((c - (int)'a' + 13) % 26));
// Output c = 'm'
// If you use c = 'a', then the output is c = 'n'

実際には、int へのキャストといくつかの括弧を削除できます。これにより、少し明確になる可能性がある以下が残ります。

char c = 'z';
c = (char)('a' + (c - 'a' + 13) % 26);
// Output c = 'm'
// If you use c = 'a', then the output is c = 'n'
于 2013-02-28T09:50:33.923 に答える
1

どうですか:

a += 13;

この追加後に数値が高すぎる場合は、26 を減算して「ラップアラウンド」できるはずです。

于 2013-02-28T09:47:12.223 に答える
0

私はこれがそれをするだろうと思います:

int a = Convert.ToInt32('z');
a = (a >= 97 && a <= 122) ?
        (a > 109) ?
            a -= 13 : a += 13 : (a >= 65 && a <= 90) ?
                (a > 77) ?
                    a -= 13 : a += 13 : a;
string c = Convert.ToChar(a).ToString();

これは基本的に単一文字のC#ROT13メソッドですが、より短い(そして読みにくい)形式です。

于 2013-02-28T09:58:34.397 に答える
0

ループする必要はありません。値forに 13 を追加するだけです。int

a = a + 13;

また

a += 13;
于 2013-02-28T09:48:38.250 に答える
0

これは for loop 必要ありません:

int a = Convert.ToInt32('z');
            if (a > 96 && a < 122)
            {
                a+=13;
            }
            else
            {
                a = 97;
            }
        string c = Convert.ToChar(a).ToString();
于 2013-02-28T09:55:09.000 に答える