B - Keyboard Layouts

传送门

 

题意:

给定三个字符串,分别为s1,s2,s。其中s1,s2都是包含了26个英文字母的字符串,都是代表了不同的键盘布局。s通过s1的键盘打出来的,现在让你输出相同操作下使用键位为s2的键盘打印出来的s。

思路:

首先先用map来存一下 s1和s2的关系,然后遍历字符串s :

1、如果s[i]为小写字母,直接通过map转换

2、如果s[i]为大写字母,先转换小写字母,执行1步骤

3、如果s[i]不是字母,不用变换。

 

代码:

#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
string s,s1,s2;
map<char,char>mp;

int main(){
    cin>>s1>>s2>>s;
    for (int i=0; i<26; i++) mp[s1[i]]=s2[i];
    for (int i=0; i<s.length(); i++) {
        char c=s[i];
        if (c>='a'&&c<='z') s[i]=mp[c];
        else if(c>='A'&&c<='Z'){
            c+='a'-'A';
            c=mp[c];
            s[i]=c-'a'+'A';
        }
    }
    cout<<s<<endl;
}

 

posted @ 2020-05-08 21:39  驿书达  阅读(229)  评论(0编辑  收藏  举报