Расшифровка проблемы Цезаря Сайфера - PullRequest
0 голосов
/ 14 декабря 2011

Я был в тупике на этом долгое время, и мне было интересно, если кто-нибудь может мне помочь.Как я мог написать программу, которая вычисляла бы значение сдвига зашифрованного файла Цезаря Cypher в C ++?Мое задание - взять каждую строчную букву и вычислить, сколько раз каждая из них используется, а затем найти наиболее часто встречающийся символ.Я знаю, что могу сделать это с картой char и int.Но тогда мне придется вернуться к этому письму, чтобы заменить его на букву «е».С картами нет возможности поиска значений.Я думаю, что единственный способ - это вектор векторов, но я бы тоже не знал, как найти букву с ними.Кто-нибудь знает лучший способ или как я могу использовать векторы для достижения этой цели?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Вы можете пойти вот так.

  1. Сначала прочитайте весь файл в буфере.
  2. Создать карту с ключом char и значением int. со всеми алфавитами и значениями 0
  3. Цикл по всему буферу до конечного возрастающего значения в карте на 1 для каждого символа. Также сохраняйте max переменную, хранящую ключ ха символа с максимальным значением.

  4. В конце цикла max переменная будет указывать на e.

  5. Вычитание 4 из max даст вам значение сдвига для этого шифра. Если оно получится отрицательным, вы можете добавить 26. (Как этот расчет в моде 26)
1 голос
/ 14 декабря 2011

Все, что вам нужно, это вектор размером 26 (по одному на каждый символ), где A имеет индекс 0, а Z имеет индекс 25.

Пройдите через шифротекст и в векторе увеличьте значение для указанного символаindex.

Когда вы пройдете весь зашифрованный текст, пройдитесь по вектору и проверьте наивысшее значение.Вероятно, это символ E.

Теперь вы берете индекс и вычитаете с 4 (индекс E).

Это дает значение сдвига.

Скажем, 20 имеетсамый высокий счет, тогда ваше значение сдвига равно 16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...