标签:namespace lag ace cout cin getchar getline div title
#include<iostream> #include<vector> #include <string> #include <set> using namespace std; struct book{ int ID; string title; string author; vector<string>key_word; string publisher,year; }; int main(){ int n,m,t_ID,temp,flag=0; string t_title,t_author,t_key,t_pub,content,t_year; cin>>n; vector<book>B(n); for(int i=0;i<n;i++){ book b; cin>>t_ID; getchar(); getline(cin,t_title); getline(cin,t_author); while(cin>>t_key){ b.key_word.push_back(t_key); char c=getchar(); if(c==‘\n‘) break; } getline(cin,t_pub); cin>>t_year; b.ID=t_ID; b.title=t_title; b.author=t_author; b.publisher=t_pub; b.year=t_year; B.push_back(b); } cin>>m; set<int>S; for(int i=0;i<m;i++){ scanf("%d: ",&temp); getline(cin,content); if(temp==1){ for(int j=0;j<B.size();j++){ if(B[j].title==content){ S.insert(B[j].ID); flag=1; } } } if(temp==2){ for(int j=0;j<B.size();j++){ if(B[j].author==content){ S.insert(B[j].ID); flag=1; } } } if(temp==3){ for(int j=0;j<B.size();j++){ for(int k=0;k<B[j].key_word.size();k++) if(B[j].key_word[k]==content){ S.insert(B[j].ID); flag=1; } } } if(temp==4){ for(int j=0;j<B.size();j++){ if(B[j].publisher==content){ S.insert(B[j].ID); flag=1; } } } if(temp==5){ for(int j=0;j<B.size();j++){ if(B[j].year==content){ S.insert(B[j].ID); flag=1; } } } if(flag==1){ cout<<temp<<": "<<content<<endl; for(auto it=S.begin();it!=S.end();it++) printf("%07d\n",*it); } else{ cout<<temp<<": "<<content<<endl; cout<<"Not Found"<<endl; } S.clear(); flag=0; } return 0; }
将有空格隔开的一个字符串分为数个字符串时可以用:
while(cin>>t_key){ b.key_word.push_back(t_key); char c=getchar(); if(c==‘\n‘) break; }
==============在拿到此题的时候我感觉这题可以用map来做,但是还是觉得用结构体模拟要简单一点,下面我想用map试试
标签:namespace lag ace cout cin getchar getline div title
原文地址:https://www.cnblogs.com/tao7/p/12236188.html