Не могу создать цикл для операции xor

116
18 марта 2021, 21:00

Наткнулся на задание с шифрованием через XOR. В нем было сказано, что нужно вводить ключ в программу 3-мя способами. Последний из них: ключ вводится в прямой последовательности, а потом в обратной. То есть "ШифррфиШ", а символы текста, который шифруется, просто идут прямо себе. Никак не могу понять, какой создать для этого цикл. Спасайте, я тупенький. Только не предлагайте создать сам ключ, который повторяет себя наоборот, мне именно циклом надо)

Answer 1

Извращение делать это одним циклом вместо двух последовательных, но вот: https://ideone.com/Q34qbh

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
  string s;
  cin >> s;
  for (size_t q=1, n=0, w=~0U; q<s.length(); ++q)
    if (n)
      cout << s[q] << ' ' << s[++w %= n] << endl;
    else if (equal(s.begin(), s.begin()+q, s.rend()-1-q))
      n = q+1 >> 1;
  return 0;
}

Вариант с двумя циклами: https://ideone.com/jt6ImD

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
  string s;
  size_t n;
  cin >> s;
  for (n=2; n<s.length() && !equal(s.begin(), s.begin()+n-1, s.rend()-n); ++n);
  n >>= 1;
  for (size_t q=n+1, w=0; q<s.length(); ++q, ++w%=n)
    cout << s[q] << ' ' << s[w] << endl;
  return 0;
}
READ ALSO
Можно ли вызывать std::move несколько раз?

Можно ли вызывать std::move несколько раз?

Корректен ли подобный код?

96
Недопустимое имя столбца в запросе

Недопустимое имя столбца в запросе

Есть запрос, который содержит кириллические символы(думаю вся проблема в них)

80
Не работает обработчик события KeyDown, C# [дубликат]

Не работает обработчик события KeyDown, C# [дубликат]

Уже задавал такой вопрос, но ответа нет: не обрабатывается событие KeyDownВот сам обработчик:

97
Поиск дочерних объектов в Unity

Поиск дочерних объектов в Unity

Я создаю префабы и для замены их компонентов использую

104