ACM程序设计 -B 2题 (字典查找)

描述:写字典 英文+空格+词语,然后输入,输入最多不超过100002个 单词 ,最后一个回车,输入词语,输出词语的英语。
刚开始看到题,寻思用 string 输入,用两个string变量数组 把空格 两边的单词分别写入 两个数组中,但是,没有想到如何结束第一个while语句,第二个while,cin(string),然后从
第二个数组中寻找 是否有 输入的string变量,如果有从第一个string数组中输出。
Code:
#if    0                    //my
#include<bits/stdc++.h>
using namespace std;
int main()
{
 string a,ai[100],bi[100],aii;
 int ii,n,i=0;
 
 while(getline(cin,a))
 {
  if(a=="") break;
  n=a.size();
  ii=a.find(" ");
  ai[i]=a.substr(0,ii);
  bi[i]=a.substr(ii+1,n-ii);
 i++;
 
 }
while(getline(cin,aii))
{
int ni=0;
 for(int i=0;i<100;i++)
 {
  if(bi[i]==aii)
  {
  cout<<ai[i]<<endl;ni=1;break;
     }
    ;
 }
 if(ni==0)
      cout<<"eh"<<endl; 
 
}

}
#endif
这里面的 if(a=="") break; 结束while(),是借鉴百度上的代码,有木有,有木有,然后运行发现用时超长,看了一下的代码,发现用map的效率会更高,尤其面对数据超多的时候,有木有。
#if  0             // 2题   百度
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
   map<string,string>a ;
   char s[30],s1[12],s2[12];
   int n,i;
   while(gets(s))
   {
     if(strcmp(s,"")==0) break;
     else
      {
        n=strlen(s);      
        for(i=0;i<n;i++)
        {
         if(s[i]==' ')break;
     }
   }
     strncpy(s1,s,i);
     s1[i]='\0';
  
   strncpy(s2,s+i+1,n-i);
         s2[n-i]='\0';
         a[s2]=s1;
  
   } 
  while(cin>>s2)
  {
   if(a[s2]=="")
   cout<<"eh"<<endl;
   else cout<<a[s2]<<endl;
  }
 
  }
 
#endif

发现了用map 然后自己写了一个:
//2.
#if  0                     //my
#include<bits/stdc++.h>
using namespace std;
int main()
{
 map<string,string>m;
 string a,ai,bi;
 int ii,n;
 
 while(getline(cin,a))
 {
  if(a=="") break;
  n=a.size();
  ii=a.find(" ");
  ai=a.substr(0,ii);
  bi=a.substr(ii+1,n-ii);
  m[bi]=ai;
 
 }
while(getline(cin,ai))
{
 if(m.count(ai))
 cout<<m[ai]<<endl;
 else cout<<"eh"<<endl;
 
}

}
#endif




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值