这次的题都是英文题,读的时候依然生涩难懂,尤其是刚上来从第一题开始看,连谷歌翻译都用上了就是觉得迷迷糊糊,干脆就把这题扔下了,找起简单点的先做。
#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;
}
#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类型的映射,分别存储两种语言就好,调用时也省去了循环,更加快捷。
代码如下:
在一个我误解了题意,当成了先输入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;
}