Untitled
unknown
c_cpp
3 years ago
2.9 kB
25
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...