Untitled
unknown
c_cpp
2 years ago
2.9 kB
24
Indexable
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; // Функция для подсчета частоты каждой буквы в тексте vector<pair<int, char>> count_freq(string text) { vector<pair<int, char>> freq(26); // Вектор пар (частота, буква) for (int i = 0; i < 26; i++) { // Инициализация вектора freq[i].first = 0; // Частота равна нулю freq[i].second = 'A' + i; // Буква соответствует номеру } for (char c : text) { // Для каждого символа в тексте if (isalpha(c)) { // Если это буква c = toupper(c); // Приводим к верхнему регистру freq[c - 'A'].first++; // Увеличиваем частоту соответствующей буквы } } sort(freq.begin(), freq.end()); // Сортируем вектор по возрастанию частоты reverse(freq.begin(), freq.end()); // Переворачиваем вектор для убывания частоты return freq; } // Функция для расшифровки текста по ключу string decrypt(string text, int key) { string result = ""; // Результат расшифровки for (char c : text) { // Для каждого символа в тексте if (isalpha(c)) { // Если это буква bool lower = islower(c); // Запоминаем регистр буквы c = toupper(c); // Приводим к верхнему регистру c = c - key; // Сдвигаем букву на ключ назад по алфавиту if (c < 'A') { // Если вышли за начало алфавита c = c + 26; // Переходим к концу алфавита } if (lower) { // Если был нижний регистр c = tolower(c); // Возвращаем нижний регистр } } result += c; // Добавляем символ к результату } return result; } int main() { string text; // Текст для расшифровки cout << "Введите текст, зашифрованный шифром Цезаря: "; getline(cin, text); // Перебираем все возможные ключи от 0 до 25 for (int key = 0; key <26; key++) { string result = decrypt(text, key); // Расшифровываем текст по ключу cout << "Ключ: " << key << endl; // Выводим ключ на экран cout << "Исходный текст: " << result << endl; // Выводим исходный текст на экран cout << endl; } return 0; }
Editor is loading...