题解 | 简单密码
简单密码
https://www.nowcoder.com/practice/ff99c43dd07f4e95a8f2f5448da3772a
#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';