Edward, a poor copy typist, is a user of the Dvorak Layout. But now he has only a QWERTY Keyboard with a broken Caps Lock key, so Edward never presses the broken Caps Lock key. Luckily, all the other keys on the QWERTY keyboard work well. Every day, he has a lot of documents to type. Thus he needs a converter to translate QWERTY into Dvorak. Can you help him?
The QWERTY Layout and the Dvorak Layout are in the following:
The QWERTY Layout |
---|
|
The Dvorak Layout |
---|
|
Input
A QWERTY document Edward typed. The document has no more than 100 kibibytes. And there are no invalid characters in the document.
OutputThe Dvorak document.
Sample InputJgw Gqm Andpw a H.soav Patsfk f;doe Nfk Gq.d slpt a X,dokt vdtnsaohe Kjd yspps,glu pgld; aod yso kd;kgluZ 1234567890 `~!@#$%^&*()}"']_+-=ZQqWEwe{[\| ANIHDYf.,bt/ ABCDEFuvwxyzSample Output
Hi, I'm Abel, a Dvorak Layout user. But I've only a Qwerty keyboard. The following lines are for testing: 1234567890 `~!@#$%^&*()+_-={}[]:"'<>,.?/\| ABCDEFuvwxyz AXJE>Ugk,qf;
//第一步查找map,如果没有,转为小写字母再进行查找,此时如果没有,判断两种特殊情况,否则原样输出 #include<stdio.h> #include<string.h> #include<algorithm> #include<string> #include<map> #include<iostream> using namespace std; const int maxn = 1100000; char str[maxn]; map<string,int>id; int main() { int i,j; string s,s2; id["_"] = '{'; id["-"] = '['; id["+"] = '}'; id["="] = ']'; id["Q"] = '"'; // id["q"] = '''; id["W"] = '<'; id["w"] = ','; id["E"] = '>'; id["e"] = '.'; id["R"] = 'P'; id["T"] = 'Y'; id["Y"] = 'F'; id["U"] = 'G'; id["I"] = 'C'; id["O"] = 'R'; id["P"] = 'L'; id["{"] = '?'; id["["] = '/'; id["}"] = '+'; id["]"] = '='; id["S"] = 'O'; id["D"] = 'E'; id["F"] = 'U'; id["G"] = 'I'; id["H"] = 'D'; id["J"] = 'H'; id["K"] = 'T'; id["L"] = 'N'; id[":"] = 'S'; id[";"] = 's'; // id["""] = '_'; id["'"] = '-'; id["Z"] = ':'; id["z"] = ';'; id["X"] = 'Q'; id["C"] = 'J'; id["V"] = 'K'; id["B"] = 'X'; id["N"] = 'B'; id["<"] = 'W'; id[","] = 'w'; id[">"] = 'V'; id["."] = 'v'; id["?"] = 'Z'; id["/"] = 'z'; while(gets(str)!=NULL) { s2.clear(); for(i = 0; str[i]!='\0'; i ++) { s.clear(); s = str[i]; if(id.count(s)) { s2 += id[s]; } else { if(str[i] == 'q')//判断特殊字符 { s = str[i]-74; s2 += s; } else if(str[i]>='a'&&str[i]<='z')//如果有小写字母 { s = str[i]-32;//转化为大写进行查找 if(id.count(s))//找到则按小写存入 { s = id[s]+32; s2 += s; } else//找不到映射则原样存入 { s = str[i]; s2 += s; } } else if(str[i] == 34)//特判特殊字符 { s = '_'; s2 += s; } else//其余情况原样存入 { s = str[i]; s2 += s; } } } cout<<s2<<endl; } return 0; }