1022. Digital Library (30)

两种解法,使用map比较快

#define  _CRT_SECURE_NO_WARNINGS

//#include<cstdio>
//#include<cstring>
//#include<cmath>
#include<string>
#include<vector>
#include<map>
#include<iostream>
//#include<queue>
#include<algorithm>
#include<sstream> 
using namespace std;


bool cmp(int a, int b)
{
return a < b;
}
int main()
{  
int N;
cin >> N; 
map<string, vector<int>> queryMap[5]; 
string s;
char tmp[80];
for (int i = 0; i < N; i++)
{
int ID;
cin >> ID;
getchar();


gets(tmp); 
s = tmp;
queryMap[0][s].push_back(ID);


gets(tmp); 
s = tmp;
queryMap[1][s].push_back(ID);


gets(tmp); 
stringstream ss(tmp);
while (ss >> s)
{
queryMap[2][s].push_back(ID);
}


gets(tmp); 
s = tmp;
queryMap[3][s].push_back(ID);


gets(tmp);
s = tmp;
queryMap[4][s].push_back(ID);

  
int M;
cin >> M;   
for (int i = 0; i < M; i++)

int NO;
cin >> NO;
getchar(); 
getchar(); 
gets(tmp);
s = tmp;
 
vector<int>v = queryMap[NO - 1][s];
cout << NO << ": " << s << endl;
if (v.size() == 0)
{

printf("Not Found\n");
continue;
}
sort(v.begin(), v.end(), cmp);
for (int j = 0; j < (int)v.size(); j++)
{
printf("%07d\n", v[j]);
}

}
return 0;


方法2

#define  _CRT_SECURE_NO_WARNINGS 
 
#include<string>
#include<string.h>
#include<vector>
#include<map>
#include<iostream> 
#include<algorithm>
#include<stdio.h> 
using namespace std;
struct Book
{
int ID;
char title[82];
char author[82];
char key[82];
char publish[82];
int year;
};
bool cmp(Book a, Book b)
{
return a.ID < b.ID;
}
int main()
{
int N;
cin >> N;
Book *book = new Book[N];
for (int i = 0; i < N; i++)
{
cin >> book[i].ID;
char cTmp;
cTmp = getchar();
gets(book[i].title);
gets(book[i].author);
gets(book[i].key);
gets(book[i].publish);
cin>>book[i].year;
}
sort(book,book+N,cmp);
int M;
cin >> M;   
for (int i = 0; i < M; i++)
{
int NO;
cin >> NO;
char cTmp;
cTmp = getchar();
cTmp = getchar();
char search[100];
gets(search);
cout << NO << ": " << search<<endl;


int count = 0;
switch (NO)
{
case 1:
{
for (int j = 0; j < N; j++)
{
if (strcmp(book[j].title, search) == 0)
{
printf("%07d\n",book[j].ID);
count++;
}
}
break;
}
case 2:
{
for (int j = 0; j < N; j++)
{
if (strcmp(book[j].author, search) == 0)
{
printf("%07d\n", book[j].ID);
count++;
}
}
break;
}
case 3:
{
for (int j = 0; j < N; j++)
{
if (strstr(book[j].key, search) !=NULL)
{
printf("%07d\n", book[j].ID);
count++;
}
}
break;
}
case 4:
{
for (int j = 0; j < N; j++)
{
if (strcmp(book[j].publish, search) == 0)
{
printf("%07d\n", book[j].ID);
count++;
}
}
break;
}
case 5:
{
for (int j = 0; j < N; j++)
{
if (book[j].year== atol(search))
{
printf("%07d\n", book[j].ID);
count++;
}
}
break;
}
default:
break;
}
if (count == 0)
cout << "Not Found\n";
}
return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值