一个二进制数,将其每一位取反,称之为这个数的反码。
下面我们定义一个字符的反码。
如果这是一个小写字符,则它和字符 a
的距离与它的反码和字符 z
的距离相同;如果是一个大写字符,则它和字符 A
的距离与它的反码和字符 Z
的距离相同;如果不是上面两种情况,它的反码就是它自身。
举几个例子,a
的反码是 z
;c
的反码是 x
;W
的反码是 D
;1
的反码还是 1
;$
的反码还是 $
。
一个字符串的反码定义为其所有字符的反码。
我们的任务就是计算出给定字符串的反码。
输入格式
若干行,每行一个字符串。
最后一行只包含一个字符 !
,表示输入结束,无需处理。
输出格式
对于输入的每个字符串,输出其反码,每个数据占一行。
数据范围
输入最多 1010 行有效字符串,每行不超过 8080 字符。
输入的字符串中不包含空格。
输入样例:
Hello
JLU-CCST-2011
!
输出样例:
Svool
QOF-XXHG-2011
#include <iostream>
using namespace std;
#include<cstring>
#include<algorithm>
void change(char & s){
if(s<='m' && s>='a'){
s = 'z'-(s-'a');
}
else if(s<='M' && s>='A'){
s = 'Z'-(s-'A');
}
else if(s<='z' && s>='m'){
s = 'a'+('z'-s);
}
else{
s = 'A'+('Z'-s);
}
}
int main(){
string str;
cin >> str;
while(1){
if(str[0]=='!' && str.length()==1){
break;
}
for(int i=0;i<str.length();i++){
if((str[i]>='a' && str[i] <='z')||(str[i]>='A' && str[i] <='Z')){
change(str[i]);
}
cout << str[i];
}
cout << endl;
cin >> str;
}
return 0;
}