您的位置:首页 > 其它

【POJ 2503】Babelfish(字符串)

2016-07-31 14:48 302 查看


给定字典,再询问。

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

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() == '\n')//指针当前指向\n
if(!f)
{
f = 1;
dic[s] = t;//当前读入的s是外星文,刚才读入的t是对应的英文
}
else
cout << ((t = dic[s]) != "" ? t : "eh" ) << "\n";
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
;
int c;
struct mydic
{
char zh[M];//外星文
char en[M];//英文
} dic
;
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\n", dic[m].en);
return;
}
if(f < 0)
l = m + 1;
else
r = m;
}
printf("eh\n");
}
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();
}


  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: