2503 Babelfish:字符串string类+map操作总结

题目大意

你刚从滑铁卢搬到一个大城市。这里的人说一种听不懂的外国方言。幸运的是,你有一本字典可以帮助你理解它们。

输入

输入最多包含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;
	}
}
发布了186 篇原创文章 · 获赞 13 · 访问量 9323

猜你喜欢

转载自blog.csdn.net/csyifanZhang/article/details/105158221
今日推荐