兔兔 的 题解 ——词典 (map.cpp)

词典 (map)


题目描述

你在国外的城市旅游。那里的人们说的外国语言你都不能理解(你只会说英语)。不过幸运的是,有一本词典可以帮助你。

输入格式

首先输入一个词典,词典中包含不超过 100000 100000 100000 个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过 100000 100000 100000 行,而且每行只包括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过 10 10 10

输出格式

在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个外语单词不在词典中,就把这个单词翻译成“eh”。

样例

样例输入

og ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay

样例输出

cat
eh
loops


这道题用 m a p map map 做就会非常的简单,但是难点在于 输 入 输入

在这里就要用到一些非常 " 神 奇 神奇 " 的东西了—— i s t r i n g s t r e a m istringstream istringstream g e t l i n e getline getline
它们的用法简单的理解如下:

  • i s t r i n g s t r e a m istringstream istringstream
    istringstream 一个名字(字符串);
    例如: istringstream cins(str);
    简单的意思就是将 str 保存在 cins 里了,我们可以再用 cins >> s 将 str 以空格每个字符串依次输入到了 s 中。
    这里定义的 cins 其实跟 cin 的用法是一样的,只是 cins 输入的字符串不是用键盘输入的,而是之前就保存 cins 中的。

  • g e t l i n e getline getline
    getline(输入方法, 字符串名称);
    例如: getline(cin, str);
    意思就是用 cin 输入 str , 只不过这里的 cin 不会过滤空格。

  • 有些读者看完上面的概念可能还不太懂,作者还是给大家举了一个例子哦~

#include 
#include 
using namespace std;

string str, s;

int main()
{
	getline(cin, str);
	istringstream cins(str); // 这里的 "cins" 可以是其他词, 但不能是关键词, 它跟 fstream 的用法基本一样, 只是没有 " " (双引号).
	while (cins >> s)
		cout << s << endl;
	return 0;
}
样例输入:
Hello world

样例输出:
Hello
world

这里输出的 s s s 就是输入的 s t r str str 空 格 分 隔 空格分隔 的每个字符串。


由于题目没有告诉我们输入的次数,所以这道题需要使用无限输入。而且 “词典” 和 " 查询 " 的输入中间只有 ’ \n ’ (换行符) 相互隔开。这里我们就要用 g e t l i n e getline getline 了。
伪代码如下:

while (输入字符串0 (这里不要过滤空格))
{
	如果(字符串没有长度(说明这一次输入的是换行,"词典输入完毕")) 结束循环;
	istringstream cins(输入字符串0);
	cins >> 字符串1 >> 字符串2;
}

我们用一个 m a p map map < s t r i n g string string s t r i n g string string> word 来储存外语单词的英语单词 (因为 map 比较特殊,它的下标可以为字符串,所以我们就要好好利用它) ,即:

map<string string> word;
word[字符串2] = 字符串1;

最终的代码如下 (大家不要复制粘贴哟~,看完理解后自己再尝试着打一遍) :

#include 
#include 
#include 
using namespace std;

map<string, string> word;

void output()
{
	string S;
	while(getline(cin, S))
	{
		if (word.count(S) != 0) cout << word[S] << endl;
		else cout << "eh" << endl;
	}
}

void input()
{
	string S;
	while (getline(cin, S))
	{  
		if(S.length() == 0) break;
		istringstream cins(S);
		string s1, s2;
		cins >> s1 >> s2;
		word[s2] = s1;
	}
	output();
}

int main()
{
	input();
	return 0;
}


你可能感兴趣的:(STL,数据结构)