【POJ-2503】Babelfish

98 阅读2分钟

题目

在字典中的存入 英语 和对应方言, 然后查找输入的方言 ,如果字典中存在,输出对应的英语;否则输出“eh”




解题思路

可以看出,本题需要使用map字典。而难点在于输入的处理,即判断哪个是字典数据哪个是测试数据。我的核心方法是判断空格符的有无。

  1. 对于字典数据的输入:使用 getline(cin, s) 来接收带空格的字符串,然后使用s.find(' ')找到空格的位置,接下来将整个字符使用substr拆分成两半s1和s2.以s2为键,以s1为值存入字典dict
  2. 对于测试数据的输入。可以看出,测试数据是不带空格的字符串。使用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;
}



题源:poj.org/problem?id=…