Шифрование текстового файла путем увеличения символов

Мне нужно зашифровать простой текстовый файл, увеличивая каждый символ на 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;
}
Другие вопросы по тегам