PAT甲级1022题 Digital Library
最开始字符串只开了80,导致测试点3一直不过,多开了一点之后终于过了
#include<bits/stdc++.h>
using namespace std;
#define max 10010
typedef struct{
char id[10];
char title[85];
char author[85];
char key_words[100];
char publisher[85];
char pub_year[10];
}BOOK;
bool cmp(BOOK a,BOOK b){
return strcmp(a.id,b.id)<0;
}
int main(){
int N;
cin>>N;
BOOK book[max];
for(int i = 0;i<N;i++){
scanf("%s",book[i].id);
getchar();
cin.getline(book[i].title,85);
cin.getline(book[i].author,85);
cin.getline(book[i].key_words,100);
cin.getline(book[i].publisher,85);
cin.getline(book[i].pub_year,10);
}
sort(book,book+N,cmp);
int M;
cin>>M;
for(int i = 0;i<M;i++){
int n;
scanf("%d: ",&n);
char tmp[85];
cin.getline(tmp,85);
printf("%d: %s\n",n,tmp);
int flag = 0;
if(n==1){
for(int i = 0;i<N;i++){
if(strcmp(tmp,book[i].title)==0) {printf("%s\n",book[i].id);flag = 1;}
}
}else if(n==2){
for(int i = 0;i<N;i++){
if(strcmp(tmp,book[i].author)==0) {printf("%s\n",book[i].id);flag = 1;}
}
}
else if(n==3){
for(int i = 0;i<N;i++){
if(strstr(book[i].key_words,tmp)) {printf("%s\n",book[i].id);flag = 1;}
}
}
else if(n==4){
for(int i = 0;i<N;i++){
if(strcmp(book[i].publisher,tmp)==0) {printf("%s\n",book[i].id);flag = 1;}
}
}
else if(n==5){
for(int i = 0;i<N;i++){
if(strcmp(tmp,book[i].pub_year)==0) {printf("%s\n",book[i].id);flag = 1;}
}
}
if(flag == 0) printf("Not Found\n");
}
return 0;
}