题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1075
题目大意:前面的Start,End范围内的每行的两个字符串是火星文和英文的转换翻译,然后后面的Start,End范围内的是火星文的内容,让你转化为英文即可.
直接用map保存对应转换关系,然后按字符挨个读取判断即可.
AC代码:
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<map>
#pragma warning (disable : 4996)
using namespace std;
map<string, string> world;
bool flag = false;
char cr;
string str1, str2;
int main()
{
//读取第一行Start.
cin >> str1;
//把对应的单词放到map中去.
while (cin >> str1)
{
if (str1 == "END")
break;
cin >> str2;
world[str2] = str1;
}
cin >> str1;
//读取换行符.
getchar();
str1.clear();
while (1)
{
while (1)
{
scanf("%c", &cr);
//如果是小写字母.则加起来.
if (cr <= 'z' && cr >= 'a')
{
str1 += cr;
}
//如果是E.则代表结束了.
else if (cr == 'E')
{
flag = true;
}
//否则代表半角标点.
else
break;
}
//如果flag被修改,则直接返回.
if (flag)
break;
//查找地图中是否存在.
if (world.count(str1) == 0)
cout << str1;
else
cout << world[str1];
str1 = "";
printf("%c", cr);
}
return 0;
}