0

这是我的 c# 代码,用于将 ascii 值增加 13

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 循环:

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 回答
0

不需要for循环 - 您只需将 13 添加到int值:

a = a + 13;

或者

a += 13;
于 2013-02-28T09:48:38.250 回答