我正在尝试翻译我的'Caesar Cipher函数',我在Javascript中编写了C#。
我的问题,到目前为止似乎已经收到了这封信,在代码转换被推入我的最终阵列之后......我真的需要一些好的建议。
using System;
class caesar_cipher
{
private static string caesar(string input, int n)
{
n = n % 94;
string cipher = "";
for (int i = 0; i < input.Length; i++)
{
input = input.Replace("Ä", "Ae");
input = input.Replace("Ü", "Ue");
input = input.Replace("Ö", "Oo");
input = input.Replace("ß", "ss");
input = input.Replace("ä", "ae");
input = input.Replace("ü", "ue");
input = input.Replace("ö", "oe");
int code = ((int)input[i]);
if (code >= 33 && code <= (126 - n))
{
code = code + n;
char crypt = Convert.ToChar(code);
cipher = cipher.Concat(crypt, cipher);
}
else if (code > (126 - n) && code <= 126)
{
code = ((code + n) % 94);
char crypt = Convert.ToChar(code);
cipher = cipher.Concat(crypt, cipher);
}
else
{
cipher = cipher.Concat(input[i]);
}
}
return cipher;
}
public void Main()
{
Console.WriteLine(caesar("Hello, World", 13));
Console.WriteLine(caesar("Äste in Österreich sind übermäßig große Äste!", 7));
Console.WriteLine(caesar("z", 5));
Console.WriteLine(caesar("1234567890", 283));
Console.WriteLine(caesar("KEIN LIMIT!!!", 940));
}
}
答案 0 :(得分:1)
您可以使用pip install mxnet -U --pre
运算符将C#中的字符串连接起来:
+
但是对于这种事情,你在循环中重复地将加法连接到同一个字符串上,我们经常使用string s = "foo";
s = s + " bar";
char c = 'x';
s = s + c;
类:
StringBuilder
答案 1 :(得分:0)
您的解决方案的主要问题是cipher.Concat
方法。你不能像这样使用它,它无论如何都不会编译。您要找的是string.Concat
。但是在使用string
时,请记住它是一个不可变的类。因此最好使用StringBuilder
类。
namespace StackOverFlow {
using System;
using System.Text;
internal class Program {
private static void Main(string[] args) {
Console.WriteLine(Caesar("Hello, World", 13));
Console.WriteLine(Caesar("Äste in Österreich sind übermäßig große Äste!", 7));
Console.WriteLine(Caesar("z", 5));
Console.WriteLine(Caesar("1234567890", 283));
Console.WriteLine(Caesar("KEIN LIMIT!!!", 940));
}
private static string Caesar(string input, int n) {
n = n % 94;
var stringBuilder = new StringBuilder(input);
stringBuilder.Replace("Ä", "Ae").Replace("Ü", "Ue").Replace("Ö", "Oo").Replace("ß", "ss").Replace("ä", "ae").Replace("ü", "ue").Replace("ö", "oe");
var cipher = new StringBuilder();
for(var i = 0; i < stringBuilder.Length; i++) {
var code = ((int)stringBuilder[i]);
char crypt;
if(code >= 33 && code <= (126 - n)) { code = code + n; crypt = Convert.ToChar(code); }
else if(code > (126 - n) && code <= 126) { code = ((code + n) % 94); crypt = Convert.ToChar(code); }
else { crypt = stringBuilder[i]; }
cipher.Append(crypt);
}
return cipher.ToString();
}
}
}