这是我的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();
因此输出m
z+13
任何避免for循环的方法。
基本上我正在尝试实施ROT-13
答案 0 :(得分: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'
答案 1 :(得分:1)
怎么样:
a += 13;
现在如果在此添加后数字太高,你应该能够减去26以“环绕”。
答案 2 :(得分:0)
无需for
循环 - 您只需在int
值中添加13即可:
a = a + 13;
或
a += 13;
答案 3 :(得分:0)
你不需要这个for循环:
int a = Convert.ToInt32('z');
if (a > 96 && a < 122)
{
a+=13;
}
else
{
a = 97;
}
string c = Convert.ToChar(a).ToString();
答案 4 :(得分: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 Method,但是形式较短(且不太可读)。