これは以前に尋ねられたことを理解しており、暗号と英語の間で頻度表を比較する方法をある程度把握しています(これは私のプログラムで想定している言語です)が、これをコードに組み込む方法がわかりません.
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 を使用します。周波数を保持する int の結果のベクトルが保存されます。
ここで、どのように進めるかを結びません。英語の文字の頻度をa にハードコードしてconst std:: vector <int>
から、どうにかして比較する必要がありますか? 単純に各ベクトルを互いに比較するのではなく、効率的に比較するにはどうすればよいでしょうか?効率的な方法ではない可能性があります。
この比較は、シーザー暗号シフトでテキストを復号化するための適切なシフト値を取得するためのものです。テキストが読めるようになるまで、ブルートフォースを使用して一度に1つずつシフトしたくありません。これにアプローチする方法についてのアドバイスはありますか?ありがとう。