Untitled

 avatar
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...