当前位置: 首页 > article >正文

PAT甲级-1022 Digital Libiary

题目

题目大意

一个图书有图书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;
}


http://www.kler.cn/a/523662.html

相关文章:

  • PySide(PyQT)进行SQLite数据库编辑和前端展示的基本操作
  • MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
  • SpringBoot中@Valid与@Validated使用场景详解
  • 71-《颠茄》
  • 联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署
  • cursor软件的chat和composer分别是什么
  • Python JSON:深入解析与高效应用
  • 21.Word:小赵-毕业论文排版❗【39】
  • PHP 7 新特性
  • JAVA实战开源项目:蜗牛兼职平台(Vue+SpringBoot) 附源码
  • 数论问题74
  • Linux C++
  • 「Unity3D」在Unity中使用C#控制显示Android的状态栏
  • 02数组+字符串+滑动窗口+前缀和与差分+双指针(D5_双指针)
  • Oracle PMON进程清洗功能
  • Unbutu虚拟机+eclipse+CDT编译调试环境搭建
  • DeepSeekMoE:迈向混合专家语言模型的终极专业化
  • 从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift
  • SQL在DBA手里-改写篇
  • 实验七 带函数查询和综合查询(2)
  • Deepseek-R1性能指标
  • 【Android】问deepseek存储访问
  • 当AI学会“顿悟”:DeepSeek-R1如何用强化学习突破推理边界?
  • TypeScript中的函数:类型安全与高级特性
  • Vue.js组件开发-实现下载动态进度条
  • 机器学习(7):集成学习