当前位置: 首页 > news >正文

词典

总时间限制: 3000ms 内存限制: 65536kB
描述

你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运
的是,你有一本词典可以帮助你。

输入
首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行。
每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔
开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,
然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包
括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过10。

输出
在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个
外语单词不在词典中,就把这个单词翻译成“eh”。

样例输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay


样例输出
cat
eh
loops

  比较简单的检索题,主要建立一个词典的结构体,然后建立完毕后用sort对外文进行升序排序,查找时直接进行二分查找,速度很快.值得注意的是构造词典时,词典的输入是以一个回车结束,所以可以使用 getchar() 函数来获取输入的第一个字符,如果是'\n',说明词典的输入停止.然后再输入待查找的外文.

看起来挺简单的题目:

#include <iostream>
#include <cstring>
#include <string>
#include <stdio.h>
#include <algorithm>
using namespace std;

int d_num, flag, res;
char temp;
char _find[12];

struct dictionary
{
    char Eng[12];
    char For[12];
}dic[100100];

bool cmp(dictionary a,dictionary b)
{
    return strcmp(a.For,b.For)<0;
}

void dfs(int left,int right,char *des)
{
    int mid = (left+right)/2;
    if(left <= right)
    {
        if(strcmp(dic[mid].For,des) < 0)//在右侧区域
        {
            return dfs(mid+1,right,des);
        }
        else if(strcmp(dic[mid].For,des) > 0)
        {
            return dfs(left,mid-1,des);
        }
        else
        {
            flag = 1;
            res = mid;
            return;
        }
    }
    return;
}

int main()
{
    while((temp=getchar()) != '\n')
    {
        dic[d_num].Eng[0] = temp;
        scanf("%s%s",dic[d_num].Eng+1,dic[d_num].For);
        d_num++;
        getchar();//行尾回车
    }
    sort(dic,dic+d_num,cmp);//词典按外文排序
    while(scanf("%s",&_find) != EOF)
    {
        flag = 0;
        dfs(0,d_num-1,_find);
        if(flag == 0)
            printf("eh\n");
        else
        {
            printf("%s\n",dic[res].Eng);
        }
    }
    return 0;
}

  这是通过自己手写的检索算法来实现的,其实并不需要自己手写,因为C++的STL库函数里面提供了一个map的容器,用来存储若干元素,这些元素都是由关键值 (Key Value,以下称为 Key 值) 和映射值 (Mapped Value,以下依旧称为映射值) 配对组成的,具体说明如下:
  在一个 map 中, Key 值通常用来排序或特指元素,映射值用来存储与该 Key 值绑定的内容。 Key 值与映射值的数据类型可以不同,而且可以一起被放进成员类型 value_type 中,value_type 是一种配对类型,定义如下:

typedef pair<const Key, T> value_type;

  在 map 内部的元素通常按照其 Key 值排序,且排序方式是根据某种明确、严格的弱排序标准进行的,这种排序标准是由 map 内部的比较对象(即 map::key_comp)指定的。
  map 容器通过 Key 值访问特定元素的速度,相较于 unordered_map 容器通常较慢,但 map 容器允许基于它们的顺序对子集进行直接迭代。
  map 中的映射值可以使用括号运算符 (operator[]) 通过其关联的 Key 值直接访问。
  map 通常使用二叉搜索树实现。

  因为map是根据二叉搜索树来实现,所以检索函数速度也还可以,这道题就是需要在两个字符串中建立一个映射,然后度字符串,判断如果是换行就退出,然后将读入的字符串存到map里面,之后继续while循环,只需要用map的查找函数count查找输入的字符串就行了,找到了就将其输出,没找到就输出eh。

这里先介绍一个东东:
istringstream

#include<bits/stdc++.h>
using namespace std;
int main()
{
	map<string,string>u;
	string s,k,g;
	int y;	
    while(1)
	{
        getline(cin,s);
        y=s.find(' ');
        if(y!=s.npos)
		{
            k=s.substr(0,y+1);
            g=s.substr(y+1);
            u.insert(make_pair(g,k));
        }
        else 
		  break;
    }
    while(cin>>s)
	{
        if(u.count(s))
		  cout<<u[s]<<endl;
        else 
		  cout<<"eh"<<endl;
    }
    return 0;
}

  今天的数据结构题就讲到这里了,再见! 

 

相关文章:

  • Spring Bean的生命周期
  • 秋招-致谢
  • 「实用工具—LICEcap」写博必备|动图制作|一键生成gif(GIF)
  • 3D目标检测(一)
  • 秋招面试- - -Java体系最新面试题(8)
  • 前端工程师面试题详解(四)
  • app端专项测试
  • 我操作MySQL的惊险一幕
  • 模糊预测股价走势
  • Qt之开源绘图控件QCustomPlot
  • Python 语言程序设计 第五章 字符串应用举例
  • C++ | 12天学好C++ (Day6)->结构图可视化、代码加通俗理解
  • Android Socket通讯 之 心跳消息
  • CSS高级篇——媒体查询 (Media Queries)
  • 921. 使括号有效的最少添加——Leetcode(2022.10.4)【栈模拟】
  • hexo+github搭建个人博客
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Android开源项目规范总结
  • C# 免费离线人脸识别 2.0 Demo
  • C学习-枚举(九)
  • IDEA 插件开发入门教程
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • node入门
  • PHP那些事儿
  • SQL 难点解决:记录的引用
  • 前端技术周刊 2019-02-11 Serverless
  • 深度解析利用ES6进行Promise封装总结
  • Hibernate主键生成策略及选择
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #微信小程序:微信小程序常见的配置传旨
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (52)只出现一次的数字III
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (全注解开发)学习Spring-MVC的第三天
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net语言中的StringBuilder:入门到精通
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @test注解_Spring 自定义注解你了解过吗?
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • []C/C++读取串口接收到的数据程序
  • []Telit UC864E 拨号上网
  • [Angular] 笔记 18:Angular Router
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C++]类和对象【上篇】
  • [C进阶] 数据在内存中的存储——浮点型篇