PAT A 1022. Digital Library (30)结构体排序检索
Posted Point
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT A 1022. Digital Library (30)结构体排序检索相关的知识,希望对你有一定的参考价值。
https://www.patest.cn/contests/pat-a-practise/1022
直接模拟,
输入,按id排序,检索
#include <iostream> #include <string> #include <algorithm> using namespace std; struct book //图书结构 { string id; string title; string author; int k; //关键词数量 string key[5]; string pub; string year; }; bool cm(const book &b1,const book &b2); //根据id排序 int main() { int n,m,i,j,k; string temp_s; book temp_b,*bks; cin>>n; bks=new book [n]; cin.get(); //字符串输入过滤回车与空格 for(i=0;i<n;i++) //输入书的信息 { getline(cin,bks[i].id); getline(cin,bks[i].title); getline(cin,bks[i].author); getline(cin,temp_s); for(j=0,k=0;j<temp_s.size();j++) { if(temp_s[j]!=‘ ‘) bks[i].key[k]+=temp_s[j]; else k++; } bks[i].k=k+1; getline(cin,bks[i].pub); getline(cin,bks[i].year); } sort(bks,bks+n,cm); //根据id排序 cin>>m; int cl; int flag; //标志是否有找到符合条件的书 for(i=0;i<m;i++) { cin>>cl; cin.get(); //跳过":" cin.get(); //跳过" " flag=0; getline(cin,temp_s); cout<<cl<<": "<<temp_s<<endl; for(j=0;j<n;j++) { switch(cl) { case 1:if(bks[j].title==temp_s) { cout<<bks[j].id<<endl; flag=1; } break; case 2:if(bks[j].author==temp_s) { cout<<bks[j].id<<endl; flag=1; } break; case 3:for(k=0;k<bks[j].k;k++) if(bks[j].key[k]==temp_s) { cout<<bks[j].id<<endl; flag=1; } break; case 4:if(bks[j].pub==temp_s) { cout<<bks[j].id<<endl; flag=1; } break; case 5:if(bks[j].year==temp_s) { cout<<bks[j].id<<endl; flag=1; } break; } } if(flag==0) cout<<"Not Found\n"; } return 0; } bool cm(const book &b1,const book &b2) { return b1.id<b2.id; }
以上是关于PAT A 1022. Digital Library (30)结构体排序检索的主要内容,如果未能解决你的问题,请参考以下文章
pat advanced level1022 digital library