OCAC暑期比赛第一场 I题 大小写转换密码锁 题解

大小写转换密码锁
原题链接:http://codeforces.com/problemset/problem/131/A
【题目描述】
对于一个字符串 s 来说,它的大小写转换密码锁是对 s 的每一位字符进行大小写转换后得到的目标字符串。
(也就是说,对于 s 上面的每一位字符 c,如果 c 是大写字母,则将其转换成对应的小写字母;如果 c 是小写字母,则将其转换为大写字母)
但是并不是所有的字符串都是经过加密的,我们定义一个字符串是大小写转换密码锁,当且仅当:
1、这个字符串全部都是大写字母;
2、或者这个字符串除了首字母不是大写字母,其它字母都是大写字母。
给你一个字符串,你需要确定它的原始字符串是什么。
这就是说,如果给你的字符串不是大小写转换密码锁,你只需要原样输出它就可以了;
而如果给你的字符串是大小写转换密码锁,你需要输出它的原始字符串。
【输入格式】
输入包含一个仅由大小写英文字母构成的字符串 s (s 的长度在 1 到 100 之间)。
【输出格式】
输出 s 按照题目描述的原始字符串。
【样例输入1】
cAPS
【样例输出1】
Caps
【样例输入2】
Lock
【样例输出2】
Lock
【题目分析】
这是一道很简单的题目,我们只需要判断除了首字母之外的其它字母是不是都是大写的,就能够确定它是不是大小写转换密码锁了。
然后,如果它是大小写转换密码锁的话,我们对他进行一下大小写转化就可以了。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;

string s;

bool check() {
    int n = s.length();
    for (int i = 1; i < n; i ++) {
        if (s[i] >= 'a' && s[i] <= 'z') return false;
    }
    return true;
}

void transfer() {
    int n = s.length();
    for (int i = 0; i < n; i ++) {
        if (s[i] >= 'a' && s[i] <= 'z') s[i] = toupper(s[i]);
        else s[i] = tolower(s[i]);
    }
}

int main() {
    cin >> s;
    if (check()) transfer();
    cout << s << endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ocac/p/11113443.html