题目
题目大意
一个图书有图书id,书名,作者,关键字,出版商,出版时间6个信息。现要查询图书的ID,1对应通过书名查询,2对应作者,3对应关键字(不需要完全一致,包含即可),4对应出版商,5对应出版时间。要求给出要查询的语句进行id查询。如果有多个id,按照从小到大的顺序输出,如果没有检索到任何id,输出"Not Found"。
思路
一个图书包含多种信息,可以用结构体数组来表示一组图书。查询问题,看题目的时间限制是1200ms,所以也不需要用map,直接for循环就可以。算是比较简单的模拟题了,主要考察字符串的应用。id注意是7位数字,如果用int,需要格式化输出,测试点3和测试点4就考察了这一点,用字符串表示id更加方便。要满足id从小到大输出,直接用sort结构体排序就可以了。
代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct book{
string id; // id最好也用string,否则要格式化输出(测试点3和测试点4)
string title;
string author;
string keyword;
string publisher;
string year;
};
bool cmp(book x, book y){
return x.id < y.id;
}
int main(){
int n, m;
cin >> n;
cin.ignore(); // 注意要忽略换行符
vector<book> v(n);
for (int i = 0; i < n; i++){
getline(cin, v[i].id);
getline(cin, v[i].title); // 整行读取
getline(cin, v[i].author);
getline(cin, v[i].keyword);
getline(cin, v[i].publisher);
getline(cin, v[i].year);
}
sort(v.begin(), v.end(), cmp);
cin >> m;
cin.ignore();
vector<string> query(m);
for (int i = 0; i < m; i++){
getline(cin, query[i]);
}
for (int i = 0; i < m; i++){
cout << query[i] << endl;
string s = query[i].substr(3, (int)query[i].size() - 3);
int flag = 0;
if (query[i][0] == '1'){
for (int j = 0; j < n; j++){
if (v[j].title == s){
flag = 1;
cout << v[j].id << endl;
}
}
}else if (query[i][0] == '2'){
for (int j = 0; j < n; j++){
if (v[j].author == s){
flag = 1;
cout << v[j].id << endl;
}
}
}else if (query[i][0] == '3'){
for (int j = 0; j < n; j++){
if (v[j].keyword.find(s) != -1){
flag = 1;
cout << v[j].id << endl;
}
}
}else if (query[i][0] == '4'){
for (int j = 0; j < n; j++){
if (v[j].publisher == s){
flag = 1;
cout << v[j].id << endl;
}
}
}else if (query[i][0] == '5'){
for (int j = 0; j < n; j++){
if (v[j].year == s){
flag = 1;
cout << v[j].id << endl;
}
}
}
if (flag == 0){
cout << "Not Found" << endl;
}
}
return 0;
}