字符串的反码【吉林大学考研机试题】

字符串的反码

一个二进制数,将其每一位取反,称之为这个数的反码。

下面我们定义一个字符的反码。

如果这是一个小写字符,则它和字符 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';
    }
}
posted @ 2023-03-07 15:36  Keith-  阅读(57)  评论(0)    收藏  举报