zoukankan      html  css  js  c++  java
  • 【POJ 2503】Babelfish(字符串)

    给定字典,再询问。

    字典与询问之间有一个空行。

    cin.peek()是一个指针指向当前字符。

    #include<iostream>
    #include<string>
    #include<map>
    using namespace std;
    map<string, string>dic;
    string s, t;
    int f;
    int main()
    {
        ios::sync_with_stdio(false);
        while(cin >> s)
            if(cin.peek() == '
    ')//指针当前指向
    
                if(!f)
                {
                    f = 1;
                    dic[s] = t;//当前读入的s是外星文,刚才读入的t是对应的英文
                }
                else
                    cout << ((t = dic[s]) != "" ? t : "eh" ) << "
    ";
            else//未换行说明s是字典的英文
            {
                f = 0;//f=0代表下一个要读外星文
                t = s;
            }
    }

    处理空行的技巧

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define N 100005
    #define M 15
    char s[N];
    int c;
    struct mydic
    {
        char zh[M];//外星文
        char en[M];//英文
    } dic[N];
    int cmp(const mydic &a, const mydic &b)
    {
        return strcmp(a.zh, b.zh) >= 0;
    }
    void  solve()
    {
        int l = 0, r = c;
        while(l < r)
        {
            int m = r+l >> 1;
            int f = strcmp(s, dic[m].zh);
            if(f == 0)
            {
                printf("%s
    ", dic[m].en);
                return;
            }
            if(f < 0)
                l = m + 1;
            else
                r = m;
        }
        printf("eh
    ");
    }
    int main()
    {
        while(gets(s))
        {
            if(!s[0])break;//读到空行
            sscanf(s,"%s%s",dic[c].en,dic[c].zh);
            c++;
        }
        sort(dic, dic + c, cmp);
        while(gets(s))
            solve();
    }

      

      

  • 相关阅读:
    第二次作业
    动手动脑
    第五周总结
    第四周总结
    二维数组
    返回一个整数数组中最大子数组的和---第一次完善
    第三周总结
    第二周进度
    自我介绍
    返回一个整数数组中最大子数组的和
  • 原文地址:https://www.cnblogs.com/flipped/p/5723011.html
Copyright © 2011-2022 走看看