字符串的反码
一个二进制数,将其每一位取反,称之为这个数的反码。
下面我们定义一个字符的反码。
如果这是一个小写字符,则它和字符 a 的距离与它的反码和字符 z 的距离相同;如果是一个大写字符,则它和字符 A 的距离与它的反码和字符 Z 的距离相同;如果不是上面两种情况,它的反码就是它自身。
举几个例子,a 的反码是 z;c 的反码是 x;W 的反码是 D;1 的反码还是 1;$ 的反码还是 $。
一个字符串的反码定义为其所有字符的反码。
我们的任务就是计算出给定字符串的反码。
输入格式
若干行,每行一个字符串。
最后一行只包含一个字符 !,表示输入结束,无需处理。
输出格式
对于输入的每个字符串,输出其反码,每个数据占一行。
数据范围
输入最多 10 行有效字符串,每行不超过 80 字符。
输入样例:
Hello
JLU-CCST-2011
!
输出样例:
Svool
QOF-XXHG-2011
思路
求一定范围\([a,b]\)内x关于中间轴对称的另一个数x'
\[x' = a + (b - x + 1) - 1 \]\[x' = a + b - x \]代码
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
if(s == "!")return 0;
for(auto c:s){
if(isupper(c))c = 'A' + 'Z' - c;
else if(islower(c))c = 'a' + 'z' - c;
cout << c;
}
cout << '\n';
}
}