#include <iostream>
#include <cstdio>
#include <string>
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] && str[i] <= 'Z') {
str[i] = (str[i] - 'A' - 5 + 26) % 26 + 'A';
}
}
cout << str << endl;
getline(cin, str); //结束行
return 0;
}
}
关键点
- 输入格式:起始行(一行)、密文(一行)、结束行(一行);起始行分为两种,START和ENDOFINPUT ;开始用while (getline(cin, st r)) {接收掉起始行,然后判断:如果是ENDOFINPUT 则直接结束;若是START则接着读取密文;最后用一个getline(cin, str)接 收掉END
- 翻译密文:循环平移类问题,不能简单的-5; 并且要取模解决负数问题;
应该 str[i]=(str[i]-'A'-5+26) %26+'A';