文章目录

  • 题目分析
  • 题目链接

题目分析

分析:
一本书信息由6个,想到用结构体来存。 至于每一个信息可以用string来存,而关键字在想使用vector<string> keywords还是set<string> keywords来存呢? 看到下面需要查找,自然放弃vector,选用set来存关键字。

另一个问题是 读入的时候是书名或者作者等中间都有空格, 所以读入的时候需要使用getline(cin,第二个参数). 注意:如果getline之前使用了cin,需要先用一个getchar()读掉一个回车。

另外,对于关键字,这一行最多有5个关键字,这里使用C++的一个关于字符串的类stringstream,主要用来做字符切割,比如关键字这种情况。读入一行,切割成几个关键字。
下面是一个stringstream的用法举例。

getline(cin, line);//读入关键字一行
stringstream ssin(line); //对象ssin初始化为line,里面存的是line中的内容
string  tmp; //用来读出一个一个关键字
set<string> keywords;
while(ssin>>tmp){keywords.insert(tmp); //set中插入 读入的几个关键字
}

对于查询操作, 从第3个下标开始才是有用信息,到底是书名还是作者等等。之前的 line[0]代表查询的种类

 string info =line.substr(3); //有用信息

查询到的结果用vector来存,因为要求id从小到大排序,所以只需要对vector排序输出即可。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N =1e4+10;//书的结构体
struct Book{string id,name,author;set<string> keywords;string publisher;string year;};int main(){int n,m;cin>>n;vector<Book> books;for(int i =0; i<n;i++){ //每一本书string id , name ,author;cin>>id;getchar();//读回车getline(cin,name),getline(cin,author);//用于处理keyword,存放在set中string line;getline(cin,line);stringstream ssin(line); //从string里面读东西出来string keyword;set<string> keywords;//分离getline读入的一行中的keywordwhile(ssin>>keyword){keywords.insert(keyword);}string publisher,year;getline(cin,publisher);cin>>year;//信息压入结构体books.push_back({id, name ,author, keywords,publisher,year});}cin>>m;getchar();//读入上一行的回车string line;for(int i = 0 ;i<m; i++){getline(cin,line); //读一行cout<<line<<endl;vector<string> res; //存id,用于输出string info =line.substr(3); //查询的有效信息,比如书名,作者char t= line[0];//查询类型if(t=='1'){for(auto & book : books){ //遍历所有的书if(book.name == info)res.push_back(book.id);}}else if(t=='2'){for(auto & book : books){if(book.author == info)res.push_back(book.id);}}else if(t=='3'){for(auto & book : books){if(book.keywords.count(info))res.push_back(book.id);}}else if(t=='4'){for(auto & book : books){if(book.publisher == info)res.push_back(book.id);}}else {for(auto & book : books){if(book.year == info)res.push_back(book.id);}}if(res.empty()) cout<<"Not Found"<<endl;else{sort(res.begin(),res.end()); //按序输出for(auto c:res) cout<<c<<endl;}}}

题目链接

PAT甲级1022 Digital Library (30分)

PAT甲级1022 Digital Library (30分):[C++题解]结构体、排序、查询相关推荐

  1. PAT甲级1062 Talent and Virtue:[C++题解]结构体、哈希表

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 分4个vector,单独排序即可. ac代码 #include<bits/stdc++.h> using namespa ...

  2. pat 甲级 1022 Digital Library 报错,格式错误等

    当你被1022题搞得恼羞成怒,反复检查代码准确无误,怀疑是输出格式问题时(你可能已经测试了两种不同格式) 那么我相信看到这篇文章的你编写的程序应该是准确的,只是PAT题目编写的随意程度再次令人乍舌. ...

  3. 1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 解析: 将每一部分都用哈希表映射.映射的结果 ...

  4. PAT甲级1072 Gas Station (30 分):[C++题解]dijkstra算法、最短路

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 所有的dist[ ]都≤Ds:最小的dist[ ]最大; dist[ ] 总和最大. 由于加油站是字符,为了简单起见,将m个加油站编 ...

  5. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  6. PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 凭爱好,分人群.注意点:爱好可传递.什么意思?意思是A和B的有共同爱好1, B和C有共同爱好2,那么认为A和C也是同一群人. 按照爱 ...

  7. PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法

    文章目录 题目分析 题目链接 题目分析 分析 把N(样例中N=169)看成背包的体积:把k(样例中k=5)看成背包能承的重量.把这道题转化为二维完全背包问题.由于数据范围给出的次幂P∈[2,7],那么 ...

  8. PAT甲级1049 Counting Ones (30 分):[C++题解]统计1的个数、数位统计

    文章目录 题目分析 题目链接 题目分析 来源:PAT网站 分析: 以数字abcdefg这个7位数字为例,说一下本题的思路. 1)数字1在每一位出现的次数. 2)以第d位为例,第d位的取值可以分为3种情 ...

  9. PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题目分析: 图论模拟题. 给定暗恋的两个人A 和B,需要寻找一对C 和D ,满足:A和C是朋友,C和D是朋友,D和B是朋友.而且A.C同性别 ...

最新文章

  1. 7月份没啥写的。。。
  2. HTTP头入门到精通(每一个HTTP消息头解释)
  3. 一个Java程序员应该掌握的10项技能
  4. 显式接口成员实现你知道吗??
  5. ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
  6. 用java实现zip压缩
  7. Asp.NetCore-部署到IIS
  8. 《MySQL——group by使用tips》
  9. matlab isa函数,使用函数编写简单测试用例
  10. ubuntu安装mysql失败怎么删除_Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置...
  11. VMware虚拟机安装Win10
  12. 关闭Typora拼写检查功能
  13. 外贸常用术语_外贸跟单常用术语
  14. 全球研究:持续绩效管理可提高竞争优势
  15. Nature Medicine:肠道菌群代谢组学-苯乙酸PAA能够诱发脂肪性肝病
  16. 华三和华为交换机配置FTP文件传输
  17. 沉痛悼念张孝祥老师逝世
  18. 多种文字翻译软件-翻译常用软件
  19. LANDSAT8 LEVEL2 COLLECTION2如何在ENVI中正确打开
  20. 计算机 无法进入pe,无法进入老毛桃pe系统解决办法[推荐]

热门文章

  1. OpenCV学习:改变图像的对比度和亮度
  2. css样式之 direction
  3. Nginx在Windows系统和Linux系统下的重启
  4. Spring(四)Bean注入方试
  5. CSS 魔法系列:纯 CSS 绘制基本图形(圆、椭圆等)
  6. Delphi中静态方法重载还是覆盖的讨论
  7. set,env,和export的区别
  8. 12 个非常有用的 JavaScript Hacks
  9. mysql热备份还原_利用xtrabackup完成mysql的热备份与还原
  10. 【Matlab 控制】利用 Simulink 对微分代数方程建模