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