两种解法,使用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;
}