题目链接http://codeforces.com/problemset/problem/831/B
输入三个字符串,第一个字符串表示第一个键盘的布局,第二个字符串表示第二种键盘的布局,第三个字符串是 文本 。题目要求 按照第一种键盘输入文本,用第二种键盘输出文本(其中数字原样输出;如果源文本中为大写字母,则输出文本的也应该是大写字母;如果源文本中为小写字母,则输出文本也应该是小写字母)。
解题思路:
对源文本进行遍历,用一个变量标记源文本字母 对应于 第一种键盘出现的下标,然后根据源文本中字母的大小写,输出对应于第二种键盘输出的文本(也就是要输出的文本)。
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1,s2,s3;
int z;
while(cin>>s1>>s2>>s3)
{
for(int i=0;i<=s3.size()-1;i++) //对源文本进行遍历
{
if(s3[i]>='0' && s3[i]<='9') //如果是数字,则直接输出
{
cout<<s3[i];
continue;
}
for(int j=0;j<=s1.size()-1;j++) //查找并标记源文本对应于第一种键盘出现的位置(也就是数组下标)
{
if(s1[j]==s3[i] || s3[i]+32==s1[j])
{
z=j;
break;
}
}
if(s3[i]>='a' && s3[i]<='z') //如果源文本为小写字母
{
if(s2[z]>='a' && s2[z]<='z')
cout<<s2[z];
else
{
s2[z]=s2[z]+32;
cout<<s2[z];
}
}
else //如果源文本为大写字母
{
if(s2[z]>='A' && s2[z]<='Z')
cout<<s2[z];
else
{
s2[z]=s2[z]-32;
cout<<s2[z];
}
}
}
cout<<endl;
}
return 0;
}