题目
在字典中的存入 英语 和对应方言, 然后查找输入的方言 ,如果字典中存在,输出对应的英语;否则输出“eh”
解题思路
可以看出,本题需要使用map字典。而难点在于输入的处理,即判断哪个是字典数据哪个是测试数据。我的核心方法是判断空格符的有无。
- 对于字典数据的输入:使用 getline(cin, s) 来接收带空格的字符串,然后使用s.find(' ')找到空格的位置,接下来将整个字符使用substr拆分成两半s1和s2.以s2为键,以s1为值存入字典dict
- 对于测试数据的输入。可以看出,测试数据是不带空格的字符串。使用s.find(' ')会返回-1,这样我就可以用break跳出接收字典数据的while循环,转而进入接收字测试数据s的while循环。以s为键判断字典中有没有对应的值,若有则输出英文名;若没有则输出eh
样例
样例输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
样例输出
cat
eh
loops
AC代码
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
/*
思路:可以看出,本题需要使用map字典。而难点在于输入的处理,即判断哪个是字典数据哪个是测试数据。我的核心方法是判断空格符的有无。
1. 对于字典数据的输入:使用 getline(cin, s) 来接收带空格的字符串,然后使用s.find(' ')找到空格的位置,接下来将整个字符使用substr拆分成两半s1和s2.以s2为键,以s1为值存入字典dict
2. 对于测试数据的输入。可以看出,测试数据是不带空格的字符串。使用s.find(' ')会返回-1,这样我就可以用break跳出接收字典数据的while循环,转而进入接收字测试数据s的while循环。以s为键判断字典中有没有对应的值,若有则输出英文名;若没有则输出eh
*/
int main()
{
map<string, string> dict; // 要求字符串作为下标,在c++中首选map<string,string>
string s, s1, s2;
// char a[100],b[100];
while (getline(cin, s))
{
int len = s.length();
int pos = s.find(' '); // 查找空白符的位置
if (pos == -1)
break; // 如果没有空白符,说明输入的已经不是字典数据了,而是测试数据。跳出,进入下一个while循环
s1 = s.substr(0, pos);
s2 = s.substr(pos + 1, len - 1 - s1.length());
/* 使用substr函数来避免string和char数组的转化
for(int i=0;i<pos;i++)
{
a[i]=s[i];
}
a[pos]='\0'; //char数组一定要以‘\0’结尾,否则乱码
s1=a;
//cout<<s1<<endl;
int k=0;
for(int i=pos+1;i<len;i++)
{
b[k]=s[i];
k++;
//s.erase(i);
}
b[len]='\0'; //char数组一定要以‘\0’结尾,否则乱码
s2=b;
*/
dict[s2] = s1; // 注意要以s2为键,因为测试数据是s2的形式
// cout<<dict.size()<<endl;
}
// int size=dict.size();
while (getline(cin, s))
{
if (!dict[s].empty()) // 查找到了
cout << dict[s] << endl;
else
cout << "eh" << endl;
}
return 0;
}