Как я могу заставить этот консольный шифр подкачки C # работать? - PullRequest
1 голос
/ 26 февраля 2012

Если я хотел создать приложение в консоли C # с VS2010, как я могу сделать его там, где я ввожу текст, и тогда он будет выполнять обмен 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 ]

1 голос
/ 26 февраля 2012

Предполагая, что это для демонстративного приложения, где вы действительно хотите поменять местами символы, а не биты (как потребуется в правильном шифре), вы можете использовать этот метод:

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();
}
0 голосов
/ 27 февраля 2012

Решение выглядит так:

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