关于acm程序设计书中题目 #B第二题

 这次的题都是英文题,读的时候依然生涩难懂,尤其是刚上来从第一题开始看,连谷歌翻译都用上了就是觉得迷迷糊糊,干脆就把这题扔下了,找起简单点的先做。
 #B 第二题:
 第二题要求编出一个字典,一个字符串与另一个字符串要刚好对应。
 做题时不熟悉map容器的用法,我最开始的想法  一是建一个string数组,用getline存入一整行,将字典存储。在调用时用find()函数循环查找。二是建立两个string数组,
使他们的每个元素对应,将字典存储。调用时用compare()函数循环比较筛选出来。
 写出来代码如下:
 #include<iostream>
#include<string>
using namespace std;
#include<cstdio>
int main()
{
 
 string a[10005];
 string b[100],c[100];
 int i=0,j=0,k,m;
 while(getline(cin,a[i]))
 {
  if(a[i].size()==0) break;
  i++;
 }
 while(getline(cin,b[j]))
 {
  if(b[j].size()==0) break;
  for(k=0;k<i;k++)
  {
   if(a[k].find(b[j])!=string::npos)
   {
    m=a[k].find(b[j]);
    c[j]=a[k].substr(0,m);
   }
   else c[j]="eh";
  }
  j++;
 }
 for(i=0;i<j;i++)
  cout<<c[i]<<endl; 
 return 0;
}
 我认为这两个思路并没有什么错误,但是从算法的角度来讲,这肯定不好的,无论哪一个循环起来都太费时了,远不如map来的简单。
 在一个我误解了题意,当成了先输入n行在输出n行。
 使用map就简单了许多,至于要将map定义为两个string类型的映射,分别存储两种语言就好,调用时也省去了循环,更加快捷。
 代码如下:

#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;
 }
 return 0;
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值