PAT 1022. Digital Library

本文介绍了一个使用C++实现的图书管理系统,该系统可以录入图书信息并进行查询操作。通过结构体存储图书的各项属性,利用向量容器管理图书记录,并采用字符串比较函数进行排序和查找。此外,还涉及到了标准输入输出的控制,例如使用gets和scanf函数读取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意gets puts get char各自的区别还有用法

很奇怪的就是不知道为啥clion测试的时候最后一个样例总是没有结果

而且程序也不会结束,就觉得很奇怪了,但是提交到PAT上面一点问题没有。

目前尚不清楚原因。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

struct book{
    char id[8];
    char title[81];
    char author[81];
    vector<string> kw;
    char publisher[81];
    char year[5];
};

vector <book> store;

bool cmp(book a, book b)
{
    return strcmp(a.id,b.id)<0;//注意这里,将字符串的数字ID按照递增排序
}

int main()
{
    int n,m,i,j;
    scanf("%d",&n);
    getchar(); //erase the "\n"
    for(i = 0;i<n;i++)
    {
        book bb;

        gets(bb.id);
        gets(bb.title);
        gets(bb.author);
        do{
            char tmp[10];
            scanf("%s", tmp);
            bb.kw.push_back(tmp);
        }while(getchar()!='\n');
        gets(bb.publisher);
        gets(bb.year);
        store.push_back(bb);
    }
    sort(store.begin(), store.end(), cmp);

    scanf("%d", &m);
    int order;
    char zz[81];
    int find ;

    for(int k = 0;k<m;k++)
    {
//        printf("-------------%d--------------\n",k);
        scanf("%d", &order);
        getchar();
//        printf("-------------1%d--------------\n",k);
        getchar();
//        printf("-------------2%d--------------\n",k);
        gets(zz);
//        printf("-------------3%d--------------\n",k);
        printf("%d: %s\n",order,zz);
//        printf("-------------4%d--------------\n",k);
        find = 0;

        if(order == 1)
        {
            for(j=0;j<store.size();j++)
                if(strcmp(zz,store[j].title)==0)
                {
                    puts(store[j].id);
                    find = 1;
                }

        }
        else if(order == 2)
        {
            for(j=0;j<store.size();j++)
                if(strcmp(zz,store[j].author)==0)
                {
                    puts(store[j].id);
                    find = 1;
                }
        }
        else if(order == 4)
        {
            for(j=0;j<store.size();j++)
                if(strcmp(zz,store[j].publisher)==0)
                {
                    puts(store[j].id);
                    find = 1;
                }
        }
        else if(order == 5)
        {
            for(j=0;j<store.size();j++)
                if(strcmp(zz,store[j].year)==0)
                {
                    puts(store[j].id);
                    find = 1;
                }
        }
        else if (order == 3)
        {
            for(j=0;j<store.size();j++)
            {
                for(i = 0;i < store[j].kw.size();i++)
                    if(strcmp(zz,store[j].kw[i].c_str())==0) //strcmp需要传入的是指针所以用c_str()
                    {
                        puts(store[j].id);
                        find = 1;
                        break;
                    }
            }

        }

        if(find == 0)
        {
            printf("Not Found\n");
        }

    }
    return 0;

}

/*
 3
1111111
The Testing Book
Yue Chen
test code debug sort keywords
ZUCS Print
2011
3333333
Another Testing Book
Yue Chen
test code sort keywords
ZUCS Print2
2012
2222222
The Testing Book
CYLL
keywords debug book
ZUCS Print2
2011
5
1: The Testing Book
2: Yue Chen
3: keywords
4: ZUCS Print
5: 2011
 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值