主要是对字符串的查找,为了方便并且快速的实现查找,用map会比较方便

同时如何把一个带有空格的字符串变成多个单词也有一个小技巧

char *point=book[i].keyWord;//关键词分离
while(*point){
sscanf(point,"%s",str);
point+=strlen(str)+;
string stemp(str);
mm_keyWord[stemp].push_back(i);
}
#include<stdio.h>
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
#include<string.h>
#include<algorithm>
using namespace std; struct BOOK{
char ID[];
char bname[];
char rname[];
char keyWord[];
char publisher[];
char year[];
}book[]; int cmp(BOOK x,BOOK y){
return strcmp(x.ID,y.ID)<;
} int main(){
int n,m;
while(scanf("%d",&n)!=EOF){
int i;
map<string,vector<int>>mm_bname;
map<string,vector<int>>mm_rname;
map<string,vector<int>>mm_keyWord;
map<string,vector<int>>mm_publisher;
map<string,vector<int>>mm_year; for(i=;i<=n;i++){
scanf("%s",book[i].ID);getchar();
gets(book[i].bname);
gets(book[i].rname);
gets(book[i].keyWord);
gets(book[i].publisher);
scanf("%s",&book[i].year);
}
sort(&book[],&book[+n],cmp);
//key word
char str[];
for(i=;i<=n;i++){
string s2(book[i].bname);
mm_bname[s2].push_back(i);
string s3(book[i].rname);
mm_rname[s3].push_back(i);
string s4(book[i].publisher);
mm_publisher[s4].push_back(i);
string s5(book[i].year);
mm_year[s5].push_back(i); char *point=book[i].keyWord;//关键词分离
while(*point){
sscanf(point,"%s",str);
point+=strlen(str)+;
string stemp(str);
mm_keyWord[stemp].push_back(i);
}
} int num,j;
scanf("%d",&m);
for(i=;i<=m;i++){
scanf("%d: ",&num);
gets(str);
string s1(str);
printf("%d: %s\n",num,str);
if(num==){
for(j=;j<mm_bname[s1].size();j++){
printf("%s\n",book[mm_bname[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_rname[s1].size();j++){
printf("%s\n",book[mm_rname[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_keyWord[s1].size();j++){
printf("%s\n",book[mm_keyWord[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_publisher[s1].size();j++){
printf("%s\n",book[mm_publisher[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_year[s1].size();j++){
printf("%s\n",book[mm_year[s1][j]].ID);
}
}
if(j==){
printf("Not Found\n");
}
}
} return ;
}

最新文章

  1. openssl
  2. 《嫌疑人X的献身》书评
  3. 自增build ID配置
  4. 读Effective Java笔记之one:static Factory methods instead of Constructors (静态工厂方与构造器)
  5. PLSQL_性能优化系列07_Oracle Parse Bind Variables解析绑定变量
  6. Jvm基础(2)-Java内存模型
  7. web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
  8. Oracle 卸载 不干净
  9. Java实现生命周期管理机制
  10. Java使用默认浏览器打开指定URL
  11. Chapter 14_5 _ENV和load
  12. QT的安装及环境配置
  13. idea从git上拉取并管理项目
  14. Zigbee技术开发一 设置NV_RESTORE
  15. Kafka 详解(三)------Producer生产者
  16. DEV Winform分页用户组件
  17. Oracle数据库创建表是有两个约束带有默认索引
  18. Mongodb 常用语法
  19. pushlet 之 Pushlet使用手把手实例
  20. January 06 2017 Week 1st Friday

热门文章

  1. 【Raspberry Pi】USB无线网卡自动连接
  2. Shell 变量,Shell echo命令
  3. centos 7安装jenkins
  4. 由浅入深了解Retrofit(一)
  5. ssh自动分发密匙脚本样板
  6. InfluxDB使用纪录
  7. Linux:paste命令详解
  8. css移动元素的几种方法
  9. 添加机构organizations模块
  10. 脚本操作zk