Понимание функции C ++ для обращения строки с помощью ^ = - PullRequest
0 голосов
/ 27 января 2019

Код ниже возвращает обратную строку.Например, он принимает входные данные "codebyte" и возвращает "etybedoc".

string FirstReverse(string str) {
    for(int i = 0, j = str.length() - 1; i < str.length() / 2; i++, j--)
    {
        str[i]^=str[j]^=str[i]^=str[j];
    }
    return str;
}

Я заблудился относительно того, как работает эта функция:

  1. Почему^= -оператор используется?Это побитовый оператор, но почему он используется здесь?
  2. Почему str.length() делится на 2 в цикле for?
  3. Что с изменением str[i] и str[j]?

Я хочу работать со значениями, но не знаю, с чего начать.Вводный учебник, который я использовал, не охватывал это.

1 Ответ

0 голосов
/ 27 января 2019

В качестве ответа:

  • Это функция подкачки, похожая на знаменитые взломанные функции.
    • Подробное объяснение этого механизма обмена можно найти здесь .
  • Длина делится на два, потому что в противном случае вы бы отменили каждый своп и снова получили бы исходную строку.
  • Индексы i и j выполняютсядруг против друга (от начала или конца соответственно).
...