Шифрование текстового файла путем увеличения символов
Мне нужно зашифровать простой текстовый файл, увеличивая каждый символ на 1, т. Е. "A" становится "b", "b" становится "c" и т. Д. С "z" становится "a".
Я сделал это согласно приведенному ниже коду, и хотя большинство моих выводов верны, в конце каждого файла возникают проблемы.
Например, когда входной файл содержит "abcd", генерируется вывод "bcd ef", в отличие от ответа "bcd e". Я не могу понять это.
Это мой код для функции шифрования:
void encrypt(char* inFileName, char* outFileName) {
out_stream.open(outFileName);
in_stream.open(inFileName);
if(in_stream.fail()) {
cout << "Failed to open input file." << endl;
exit(1);
}
else {
while(!in_stream.eof()) {
in_stream.get(letter);
if (letter == 'z') {
letter = 'a';
}
if (letter == 'Z') {
letter = 'A';
}
if (letter == ' ') {
letter = letter;
}
else {
letter = letter + 1;
}
out_stream << letter;
}
}
}
2 ответа
Сдвиг шифров может быть достигнут следующим образом:
while(!in_stream.eof()) {
if (letter>='a' && letter<='Z')
letter = (letter+1)%'Z' + 'a';
out_stream << letter;
}
Сократите избыточность своего кода и сделайте его максимально компактным, в вашем коде так много бесполезных условий.
Основная логика заключается в шифровании символов из...Z, вы не можете предсказать другие символы в текстовом файле, такие как \n \0 и т. Д., Поэтому они вообще не должны обрабатываться.
Я могу предложить этот кусок кода
while(!in_stream.eof()) {
if ((letter>='A' && letter<='Y')|| (letter>='a' && letter<='y'))
letter = (letter+1);
else if(letter== 'Z' || letter== 'z')
letter =(letter-25);
out_stream << letter;
}