Я понимаю, что об этом спрашивали раньше, и у меня есть некоторое представление о том, как сравнивать таблицы частот между шифром и английским (это язык, который я предполагаю для своей программы), но я не уверен, как получить это в коде .
void frequencyUpdate(std::vector< std::vector< std::string> > &file, std::vector<int> &freqArg) {
for (int itr_1 = 0; itr_1 < file.size(); ++itr_1) {
for (int itr_2 = 0; itr_2 < file.at(itr_1).size(); ++itr_2) {
for (int itr_3 = 0; itr_3 < file.at(itr_1).at(itr_2).length(); ++itr_3) {
file.at(itr_1).at(itr_2).at(itr_3) = toupper(file.at(itr_1).at(itr_2).at(itr_3));
if (!((int)file.at(itr_1).at(itr_2).at(itr_3) < 65 || (int)file.at(itr_1).at(itr_2).at(itr_3) > 90)) {
int temp = (int)file.at(itr_1).at(itr_2).at(itr_3) - 65;
freqArg.at(temp) += 1;
}
}
}
}
}
вот как я получаю частоту данного файла, содержимое которого разбито на строки, а затем на слова, следовательно, двойной вектор строк и использование значений символов ASCII - 65 для индексов. Результирующий вектор целых чисел, которые содержат частоту, сохраняется.
Теперь я не знаю, как действовать дальше. Должен ли я жестко кодировать const std:: vector <int>
для английской частоты букв, а затем как-то сравнивать? Как бы я мог эффективно сравнивать, а не просто сравнивать каждый вектор друг с другом, потому что это возможно неэффективный метод?
Это сравнение предназначено для получения подходящего значения сдвига для сдвига шифра Цезаря для расшифровки текста. Я не хочу использовать грубую силу и сдвигать по одному, пока текст не станет читаемым. Любые советы о том, как подойти к этому? Спасибо.