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