通过递增字符加密文本文件

Encrypting a text file by incrementing chars

我需要通过将每个字符递增 1 来加密一个简单的文本文件,即 'a' 变为 'b','b' 变为 'c' 等 'z' 变成 'a'.

我已经按照下面的代码完成了这项工作,虽然我的大部分输出都是正确的,但似乎在每个文件的末尾都有问题。

例如,当输入文件包含 'a b c d' 时,生成的输出是 'b c d ef' 而不是应为 'b c d 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;
        }
    }
}

移位密码可以通过这种方式实现:

while(!in_stream.eof()) {
    if (letter>='a' && letter<='Z')
        letter = (letter+1)%'Z' + 'a';
    out_stream << letter;
}

减少代码中的冗余并使其尽可能紧凑,代码中有很多无用的条件。

主要逻辑在于对a...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;
}