我知道以前有人问过这个问题,并且我对如何比较密码和英语之间的频率表有一定的了解(这是我假设它用于我的程序的语言),但我不确定如何将它变成代码.
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>
字母的英文频率,然后以某种方式进行比较吗?我将如何有效地比较而不是简单地比较每个向量,因为这可能不是一种有效的方法?
这种比较是为了得到一个适当的移位值,用于凯撒密码移位来解密文本。在文本可读之前,我不想使用蛮力并一次移动一个。关于如何解决这个问题的任何建议?谢谢。