给定三个字符串,分别为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;
}
原文:https://www.cnblogs.com/yishuda/p/12853206.html