如何让这个C#控制台交换密码工作?

时间:2012-02-26 05:36:42

标签: c# encryption console swap

如果我想在使用VS2010的C#控制台上制作应用程序,我怎样才能在输入文本的位置进行,然后它会进行101010101010交换?

lPyare1 = Player1

这是我目前所拥有的:

    static void Main()
    {
        Console.WriteLine("Enter String Here:");
        //
        // Swap characters in the string.
        //
        string value1 = Console.ReadLine();
        string swap1 = SwapCharacters(value1, 0, 1);
        Console.WriteLine(swap1);
        Console.ReadKey();
    }

2 个答案:

答案 0 :(得分:1)

假设这是一个演示应用程序,你真正想要交换字符,而不是位(正确的密码所需),你可以使用这种方法:

static string SwapCharacters(string s, char c1, char c2)
{
    StringBuilder sb = new StringBuilder(s);

    for (int i = 0; i < s.Length; ++i)
        if (s[i] == c1)
            sb[i] = c2;
        else if (s[i] == c2)
            sb[i] = c1;

    return sb.ToString();
}

您需要使用char参数调用它,而不是int

string swap1 = SwapCharacters(value1, '0', '1');

修改:要在评论中实现您的要求:

static string SwapCharacters(string s)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < s.Length; i += 2)
    {
        if (i < s.Length - 1)
            sb.Append(s[i + 1]);
        sb.Append(s[i]);
    }

    return sb.ToString();
}

答案 1 :(得分:0)

解决方案如下所示:

    string s_01 = SwapCharacters("lPyare1", 0, 1); // "Player1"
    string s_12 = SwapCharacters("Palyre2", 1, 2); // "Player2"
}
static string SwapCharacters(string source, int a, int b) { // a < b
    StringBuilder sb = new StringBuilder(source);
    for(int i = 0; i < source.Length; i++) {
        if(i % (b + 1) != b) continue;
        char tmp = sb[i - (b - a)];
        sb[i - (b - a)] = sb[i];
        sb[i] = tmp;
    }
    return sb.ToString();
}