POJ 2503 Babelfish [map & string]

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[15];
    string str1,str2,s;
    map<string,string> m;
    while(gets(str) && strlen(str))
    {
        str1=str2="\0";
        for(i=0;;i++)
            if(str[i]==' ')
            {
                str[i]='\0';
                break;
            }
        str1+=str;
        str2+=str+i+1; // ???
        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 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章