从javascript转换为c#时出现问题

时间:2017-05-26 16:51:21

标签: javascript c#

我正在尝试翻译我的'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));

}

}

2 个答案:

答案 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();
        }
    }
}