循环平移类问题, 取模解决负数问题
需要注意: 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; }