题目大意
你刚从滑铁卢搬到一个大城市。这里的人说一种听不懂的外国方言。幸运的是,你有一本字典可以帮助你理解它们。
输入
输入最多包含100,000个字典条目,后跟一个空白行,然后是一个消息,最多100,000个单词。 每个字典条目都是一行,其中包含一个英文单词,后跟一个空格和一个外语单词。 在词典中,没有外来词出现多次。 消息是外语单词序列,每行一个单词。 输入中的每个单词都是最多10个小写字母的序列。
思路与总结
直接将每一个输入对存到map中输出即可。
各种字符串的题用char*很不方便太菜了 ,还是用string来得比较好
- string的整行读取:
getline(cin, s1)
,这里不能使用cin.getline
- string的元素查找:
s1.find("")
, - string的分割与赋值:
s2.assign(s1,beginPos,endPos)
,将s1从begin
位置到结束位置-1的串赋予s2。 - 对map而言,无论是
<int,string>
还是<string,string>
,此时value的默认值是未知的,如果我们没有映射<key,value>
,直接读出m[key]
是不显示值的,所以需要判断是否有这个映射,使用m.find(key)
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<string, string>m;
string s1, a, b;
int main() {
while (getline(cin, s1)) {
//不能使用cin.getline
if (s1[0] == '\0')break;
int pos = s1.find(' ');
//assign函数将s1切成两部分进行赋值
a.assign(s1, 0, pos);
b.assign(s1, pos + 1, s1.size());
m[b] = a;
}
string ss;
while (cin >> ss) {
if (m.find(ss) != m.end())
cout << m[ss] << endl;
else
cout << "eh" << endl;
}
}