Я должен написать простую программу, которая использует две карты для шифрования / дешифрования строки «Hello World». Данные для карты шифрования задаются аргументом командной строки. Я успешно поместил данные из файла словаря в карту, и у меня также есть готовая карта дешифрования. Однако я не могу понять, как заставить программу правильно выполнять шифрование. Мой вывод должен быть «Fuggy, typegq» с учетом словаря шифрования, который показан после моего кода. Формат первого символа открытого текста сопоставляется со вторым символом зашифрованного текста. Вывод, который я получаю, является пустым пространством для «H» в Hello World, за которым следует «ibbv dvwbc». Я почти уверен, что это пустое место, потому что мой словарь содержит только строчные буквы. Как я могу улучшить свой код, чтобы получить правильный вывод?
#include<iostream>
#include<fstream>
#include<map>
#include<cctype>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
map<char, char> encryptDictionary;
map<char, char> decryptDictionary;
string dictionaryString;
string encryptThis = "Hello world";
fstream file;
int size = encryptThis.size();
file.open(argv[1]);
//Populates encryption dictionary map
while (file >> dictionaryString){
encryptDictionary[dictionaryString[0]] = dictionaryString[1];
}
//Populates decryption dictionary map
for(auto itr = encryptDictionary.begin(); itr !=encryptDictionary.end(); itr++){
decryptDictionary [ itr -> second] = itr -> first;
}
for (int i = 0; i < size; i++){
for (auto itr = encryptDictionary.begin(); itr !=encryptDictionary.end(); itr++) {
encryptThis[i] = (encryptDictionary.find(encryptThis[i])->second);
}
}
cout << encryptThis;
file.close();
return 0;
}
Это словарь, предоставленный
an
bx
cs
dq
eu
fk
gj
hf
iz
jm
ko
lg
mw
ni
oy
pl
qa
rp
sr
tb
ud
vh
wt
xe
yv
zc