以前这道题没过,需要用到字典树,当时不会,最近新学了unordered_map(hash map),结果hdu平台说找不到这个库,没办法,只好用map了,直接过了
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075
#include <iostream>
#include <map>
#include <string>
#include <cctype>
using namespace std;
//输入数据并生成字典dic
void inputDictionary(map<string, string> &dic)
{
string word, mars;
while(cin >> word)
{
if(word.compare("END") == 0)
return;
cin >> mars;
map<string, string>::iterator a = dic.find(mars);
if(a == dic.end())
dic.insert(pair<string, string>(mars, word));
}
}
//获取单词
string getWord(const string &line, string::iterator &it)
{
string r = "";
if(it == line.end())
return r;
string::iterator t = it;
for( ; t!= line.end() && !isalpha(*t); t++)
;
if(t != it)
{
r.assign(it, t);
it = t;
return r;
}
for( ; t != line.end() && isalpha(*t); t++)
;
r.assign(it, t);
it = t;
return r;
}
//将一行line翻译
void translate(map<string, string> &dic, string &line)
{
string::iterator t = line.begin();
while(true)
{
string word = getWord(line, t);
if(word.empty())
break;
if(!isalpha(word[0]))
cout << word;
else
{
map<string, string>::iterator b = dic.find(word);
if(b != dic.end())
cout << (*b).second;
else
cout << word;
}
}
}
int main()
{
//freopen("t.txt", "r", stdin);
string s;
map<string, string> dic;
getline(cin, s);
inputDictionary(dic);
getchar();
getline(cin, s);
while(true)
{
getline(cin, s);
if(s.compare("END") == 0)
break;
translate(dic, s);
cout << endl;
}
//system("pause");
return 0;
}