给定三个字符串,分别为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