7-9 h0136. 在线翻译 (20 分)

本文讲述了在C++编程中处理在线翻译问题的挑战,主要聚焦于输入处理和字典查找效率。作者遇到的问题包括如何以空行为结束标志读取输入,以及在使用map时选择合适的成员函数进行查找。通过分享解决方案,作者强调了在循环输入时使用`while(getline(cin,s)&&s!="")`的高效性和在判断关键字存在时改用`.find()`函数以提升性能。
摘要由CSDN通过智能技术生成

7-9 h0136. 在线翻译 (20 分)

您刚刚从毕节搬到了一个大城市。这里的人说的是一门不可理解的外语。幸运的是,您有一本字典可以帮助您理解它们。

输入格式:

输入最多包含100,000个字典条目,后跟一个空白行,然后是最多100,000个单词的消息。每个字典条目都是一行,包含英文单词,后跟一个空格和一个外语单词。在词典中,没有外来词出现多次。该消息是外语单词序列,每行一个单词。输入中的每个单词都是最多10个小写字母的序列。

输出格式:

输出是将消息翻译成英语,每行一个单词。词典中没有的外来词应翻译为“ eh”。

这道题看完一目了然就是用map解决

然而 两个地方卡死我了。记录一下。

第一:

后跟一个空白行

以空白行为结束标志的方法,比赛的时候试了好多好多种方法,气死了呜呜

比如

#include<bits/stdc++.h>
using namespace std;
map<string,string>z;
int main()
{

    while(1)
    {
        string s1,s2;
        cin>>s1>>s2;
        z[s2]=s1;
        getchar();
        if(getchar()=='\n')break;
    }

    while(1)
    {
        string s;
        cin>>s;
        if(z.count(s)==1)
            cout<<z[s];
        else
            cout<<"eh"<<endl;
    }
    return 0;
}

但是这里第一个getchar()把输入完一个字符串后的回车键吸收了,第二个getchar()我都本意是判断输入的是不是又是回车键,结果正常输入的时候它会把我s1的第一个字符给吃掉。         (亨烦!!)

比赛完查博客

发现了这个方法!!!

 while(getline(cin,s) && s != "")

就是输入字符串并且要满足这个字符串不是空的“ ”(记好了这个方法!!秒啊秒啊)
巧妙的运用了&&,&&左边接收输入的字符串(可以带空格)并赋值给s,接着&&的右边立马判断输入的是不是空白行。

然后呢可以得到答案了,这个时候。

时间超限了😇😇😇😇😇

我寻思着这不就是个map的事嘛,我想半天发现我把这里改成这样子就对了.....、

 

⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇ 

咱就是说,z.count(s)和z.find(s)同样是判断是否存在对应关键字的函数,时间区别这么大吗?!

所以今天咱学到的就是两点

1.在循环输入数据时,善用&&

2.用.count()的地方(判断关键字是否存在)以后改用.find()函数(就是说唯快不破) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值