1022 Digital Library (30 分)
 

A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID's.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤) which is the total number of books. Then N blocks follow, each contains the information of a book in 6 lines:

  • Line #1: the 7-digit ID number;
  • Line #2: the book title -- a string of no more than 80 characters;
  • Line #3: the author -- a string of no more than 80 characters;
  • Line #4: the key words -- each word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;
  • Line #5: the publisher -- a string of no more than 80 characters;
  • Line #6: the published year -- a 4-digit number which is in the range [1000, 3000].

It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.

After the book information, there is a line containing a positive integer M (≤) which is the number of user's search queries. Then M lines follow, each in one of the formats shown below:

  • 1: a book title
  • 2: name of an author
  • 3: a key word
  • 4: name of a publisher
  • 5: a 4-digit number representing the year

Output Specification:

For each query, first print the original query in a line, then output the resulting book ID's in increasing order, each occupying a line. If no book is found, print Not Found instead.

Sample Input:

3
1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011
3333333
Another Testing Book
Yue Chen
test code sort keywords
ZUCS Print2
2012
2222222
The Testing Book
CYLL
keywords debug book
ZUCS Print2
2011
6
1: The Testing Book
2: Yue Chen
3: keywords
4: ZUCS Print
5: 2011
3: blablabla

Sample Output:

1: The Testing Book
1111111
2222222
2: Yue Chen
1111111
3333333
3: keywords
1111111
2222222
3333333
4: ZUCS Print
1111111
5: 2011
1111111
2222222
3: blablabla
Not Found
题解:
题意是一个图书馆查询系统,除了第三个查询是查找子串,其他的问题都是字符串比较,所以就用了循环。
1.keywords的读入用到了一个字符串流
istringstream tmp(str);//<sstream>以空格分开字符串
a[i].kn=;
while(tmp>>word)
{
a[i].kn++;
a[i].key[a[i].kn]=word;
}
也可以
while(cin>>string){
char c = getchar()
if(c == ‘\n’) break;
}
2.题目中所说的year在[1000, 3000]之间,但是所给的测试并不一定在这之间,否则会测试点2不能通过。
AC代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int id;
string ti;
string au;
int kn;
string key[];
string pu;
string year;//测试点2坑点,用int反而错了,year不一定全在[1000, 3000]之间 }a[];
bool cmp(node x,node y){
return x.id<y.id;
}
int main(){
int n;
cin>>n;
string str,word;
for(int i=;i<=n;i++){
cin>>a[i].id;
getchar();//吸收回车
getline(cin,a[i].ti);
getline(cin,a[i].au); getline(cin,str);
istringstream tmp(str);//<sstream>以空格分开字符串
a[i].kn=;
while(tmp>>word)
{
a[i].kn++;
a[i].key[a[i].kn]=word;
} getline(cin,a[i].pu);
getline(cin,a[i].year);
}
/*cout<<endl;
for(int i=1;i<=n;i++){
cout<<"ID "<<a[i].id<<endl;
cout<<"TI "<<a[i].ti<<endl;
cout<<"AU "<<a[i].au<<endl;
for(int j=1;j<=a[i].kn;j++){
cout<<a[i].key[j]<<"-";
}
cout<<endl;
cout<<"PU "<<a[i].pu<<endl;
cout<<"YE "<<a[i].year<<endl;
}*/
sort(a+,a++n,cmp);
int m;
cin>>m;
int k;
char kk;
string find;
for(int i=;i<=m;i++){
cin>>k;
cin>>kk;//冒号
getchar();//空格
getline(cin,find);
cout<<k<<": "<<find<<endl;
int f=;
if(k==){//ti
for(int j=;j<=n;j++){
if(a[j].ti==find){
f=;
printf("%07d\n", a[j].id);
}
}
}else if(k==){//au
for(int j=;j<=n;j++){
if(a[j].au==find){
f=;
printf("%07d\n", a[j].id);
}
}
}else if(k==){//kw
for(int j=;j<=n;j++){
for(int p=;p<=a[j].kn;p++){
if(a[j].key[p]==find){
f=;
printf("%07d\n", a[j].id);
break;
}
}
}
}else if(k==){//pu
for(int j=;j<=n;j++){
if(a[j].pu==find){
f=;
printf("%07d\n", a[j].id);
}
}
}else if(k==){//year
for(int j=;j<=n;j++){
if(a[j].year==find){
f=;
printf("%07d\n", a[j].id);
}
}
}
if(!f){
cout<<"Not Found"<<endl;
}
}
return ;
}


 

PAT 甲级 1022 Digital Library (30 分)(字符串读入getline,istringstream,测试点2时间坑点)的更多相关文章

  1. pat 甲级 1022. Digital Library (30)

    1022. Digital Library (30) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A Di ...

  2. PAT Advanced 1022 Digital Library (30 分)

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  3. 1022 Digital Library (30 分)

    1022 Digital Library (30 分)   A Digital Library contains millions of books, stored according to thei ...

  4. 1022. Digital Library (30) -map -字符串处理

    题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...

  5. PAT-1022 Digital Library (30 分) 字符串处理

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  6. PAT 甲级 1022 Digital Library

    https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 A Digital Library cont ...

  7. 【PAT甲级】1022 Digital Library (30 分)(模拟)

    题意: 输入一个正整数N(<=10000),接下来输入N组数据,ID,书名,作者,关键词,出版社,出版年份. 然后输入一个正整数M(<=1000),接下来输入查询的数据,递增输出ID,若没 ...

  8. PAT A 1022. Digital Library (30)【结构体排序检索】

    https://www.patest.cn/contests/pat-a-practise/1022 直接模拟, 输入,按id排序,检索 #include <iostream> #incl ...

  9. PAT甲级1022 Digital Library

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336 题意: 每一本书有一个id, 书名,作 ...

随机推荐

  1. jquery中prop,attr,data的区别

    这两天翻了jq的源码,今天看到了jq关于数据存储的几个方法,遂总结一下,和小伙伴没分享一下,哪里说的不对,还望批评指正~~~ 废话不多说,直接上代码: $(function(){ $('#div1') ...

  2. C#自由组合本地缓存、分布式缓存和数据库的数据

    一.背景介绍: 我们在进行数据存储的时候,有时候会加入本地缓存.分布式缓存以及数据库存储三级的结构,当我们取值的时候经常是像下面这样的流程: 1.先取本地缓存,如果值存在直接返回 2.本地缓存不存在, ...

  3. curl、fopen和file_get_contents区别

    curl多用于互联网网页之间的抓取,fopen多用于读取文件,而file_get_contents多用于获取静态页面的内容. 1. fopen /file_get_contents 每次请求都会重新做 ...

  4. gitlab-ce白名单设置杜绝并发数过大引起的封ip故障

    gitlab-ce 7.9安装手札以及上篇文章的问题解决 鸣谢 感谢ruby大神===>章鱼的一路指点,才能拨开迷雾见云天! 章鱼大人: 国内Ansible部落原创翻译之一! 资深运维! ROR ...

  5. axios封装,使用拦截器统一处理接口

    1.项目路径下,引入axios.qs依赖 npm install axios npm install qs 2.在项目的src路径下新建一个commJs文件夹,在commJs文件夹里新建aps.js和 ...

  6. resultSet.getMetaData() 获得表结构

    1.得到查询结果,一个数据集 rs = stat.executeQuery("select * from " + table_name + " limit " ...

  7. flask读书笔记-flask web开发

    在应用启动过程中, Flask 会创建一个 Python 的 logging.Logger 类实例,并将其附属到应用实例上,通过 app.logger 访问 ===================== ...

  8. BZOJ 2229 / Luogu P3329 [ZJOI2011]最小割 (分治最小割板题)

    题面 求所有点对的最小割中<=c的数量 分析 分治最小割板题 首先,注意这样一个事实:如果(X,Y)是某个s1-t1最小割,(Z,W)是某个s2-t2最小割,那么X∩Z.X∩W.Y∩Z.Y∩W这 ...

  9. spring 使用 context:property-placeholder 加载 多个 properties

    一般使用PropertyPlaceholderConfigurer来替换占位符,例如: <bean class="org.springframework.beans.factory.c ...

  10. 2、Spring Boot 2.x 快速入门

    1.2 Spring Boot 快速入门 1.2.1 开发环境和工具 JDK 1.8+:Spring Boot 2.x 要求 JDK 1.8 环境及以上版本.另外,Spring Boot 2.x 只兼 ...