循环平移类问题, 取模解决负数问题

需要注意:
A-Z 对应的ASCII为 25-90

如果是A, 解码后是 V
B               W
C                X
D                Y
E                Z

因此,不能直接 -5
应该 (str[i] - 'A' - 5 + 26) % 26 + 'A'

代码:

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main(){
    string str;
    while(getline(cin, str))
    {
        if (str == "ENDOFINPUT") break;    // 判断是否读取结束
       // 读取正文
        getline(cin, str);
        for(int i=0; i<str.size(); i++)
        {
            if ('A' <= str[i] && 'Z' >= str[i])
                str[i] = (str[i] - 5 - 'A' + 26) % 26 + 'A';
        }

        cout<<str<<endl;
        // 读取结束行 END
        getline(cin, str);
    }

    return 0;
}