字符串处理能力有待提高
// 1022. Digital Library.cpp: 主项目文件。
#include "stdafx.h"
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=10003;
typedef struct Book{
char info[6][83];
//int id,time;
//char title[83],author[83],publisher[83];
char keyWord[8][13];
int keys;
}Book;
Book books[N];
int n;
void splitWord(int cur,char *str){
int cnt=0,low=-1,high=-1,i;
bool tag=false;
for(i=0;str[i];i++){
if(!tag){
if(str[i]!=' ')
tag=true,low=i;
}
else{
if(str[i]==' '){
high=i,tag=false;
strncpy(books[cur].keyWord[cnt++],str+low,high-low);
books[cur].keys++;
}
}
}
high=i;
strncpy(books[cur].keyWord[cnt++],str+low,high-low);
books[cur].keys++;
}
bool cmp(Book m1,Book m2){
return strcmp(m1.info[0],m2.info[0])<0;
}
void queryOperate(int ver,char *queryCmd){
bool tag=false;
if(ver!=3){
for(int i=0;i<n;i++){
if(strcmp(queryCmd,books[i].info[ver])==0)
tag=true,printf("%s\n",books[i].info[0]);
}
}
else{
for(int i=0;i<n;i++){
bool flag=false;
for(int j=0;j<books[i].keys;j++){
if(strcmp(queryCmd,books[i].keyWord[j])==0)
flag=true;
}
if(flag)
tag=true,printf("%s\n",books[i].info[0]);
}
}
if(!tag)
printf("Not Found\n");
}
int main()
{
//freopen("F:\\test.txt","r",stdin);
//freopen("F:\\output.txt","w",stdout);
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
char str[153];
for(int j=0;j<3;j++)
gets(books[i].info[j]);
books[i].keys=0;
gets(str);
splitWord(i,str);
gets(books[i].info[4]);
gets(books[i].info[5]);
}
sort(books,books+n,cmp);
int queryNum;
scanf("%d",&queryNum);
while(queryNum--){
int ver;
char queryCmd[103];
scanf("%d: ",&ver);
gets(queryCmd);
printf("%d: ",ver);
puts(queryCmd);
queryOperate(ver,queryCmd);
}
return 0;
}