字符串处理能力有待提高
// 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; }