天天看點

POJ 2503 Babelfish [map & string]Description:InputOutput:Sample Input:Sample Output:

Description:

You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.
           

Input

Input consists of up to 100,000 dictionary entries, followed by a blank line, followed by a message of up to 100,000 words. Each dictionary entry is a line containing an English word, followed by a space and a foreign language word. No foreign word appears more than once in the dictionary. The message is a sequence of words in the foreign language, one word on each line. Each word in the input is a sequence of at most 10 lowercase letters.
           

Output:

Output is the message translated to English, one word per line. Foreign words not in the dictionary should be translated as "eh".
           

Sample Input:

dog ogday
 cat atcay
 pig igpay
 froot ootfray
 loops oopslay

 atcay
 ittenkay
 oopslay
           

Sample Output:

cat
eh
loops


   這個題的大意是讓你建立一個字典,然後不知道從哪行開始給你單個詞,讓你把奇怪的詞轉換成明文。

   由于有map容器,建立映射的部分會極其簡單,是以這個題的難點是字元串的操作。需要注意的是在明文與暗文間會有一行空白的行,是以我們的任務就剩下拆分字串了。
           
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>

using namespace std;
int main()
{
    int i;
    char str[];
    string str1,str2,s;
    map<string,string> m;
    while(gets(str) && strlen(str))
    {
        str1=str2="\0";
        for(i=;;i++)
            if(str[i]==' ')
            {
                str[i]='\0';
                break;
            }
        str1+=str;
        str2+=str+i+; // ???
        m[str2]=str1;
        //cout << "str1:" << str1 << "\nstr2:" << str2 <<endl;
    }
    // 這種拆分的方法比較新奇 效率很高可以學習一下
    // 需要注意的是 str要用c風格的字串,原理沒太搞懂。。。。。。
    while(cin>>s) 
    {
        if(m[s].size())
            cout<<m[s]<<endl;
        else
            cout<<"eh\n";
    }
    return ;
}