PAT甲级1022 Digital Library

该博客探讨了C++中STL容器multimap和map的使用,特别是在处理字符串数据时的示例。程序读取多条图书信息并存储在multimap中,然后根据给定关键词搜索相关书籍ID。涉及知识点包括字符串转换、strtok函数以及输入流的处理。
摘要由CSDN通过智能技术生成
#include<cstdio>
#include<iostream>
#include<map>
#include<cstring>
#include<utility>
using namespace std;
multimap<string,string> m[5];
int main(){
    int n;
    cin>>n;
    string waste;
    getline(cin,waste);
    for(int q=0;q<n;q++){
        string id;
        string title;
        string author;
        string keyword;
        string publisher;
        string year;
            getline(cin,id);
            getline(cin,title);
            getline(cin,author);
            getline(cin,keyword);
            getline(cin,publisher);
            getline(cin,year);
        pair<string,string> p[4];
        p[0].first=title;p[0].second=id;m[0].insert(p[0]);
        p[1].first=author;p[1].second=id;m[1].insert(p[1]);
        p[2].first=publisher;p[2].second=id;m[3].insert(p[2]);
        p[3].first=year;p[3].second=id;m[4].insert(p[3]);
        char* sss=(char*)keyword.c_str();
        char* s=strtok(sss," ");
        while(s!=NULL){
            string str=s;
            pair<string,string> pp;
            pp.first=str;
            pp.second=id;
            m[2].insert(pp);
            s=strtok(NULL," ");
        }
    }
    int n1;
    scanf("%d",&n1);
    getline(cin,waste);
    for(int i=0;i<n1;i++){
        int num;
        string s1;
        getline(cin,s1);
        num=s1[0]-'0';
        cout<<s1<<endl;
        s1=s1.substr(3,s1.length()-3);
        multimap<string,string>::iterator it=m[num-1].find(s1);
        if(it==m[num-1].end()){
            printf("Not Found\n");
            continue;
        }
        map<string,int> mm;
        size_t n2=m[num-1].count(s1);
        for(size_t j=0;j<n2;j++){
            pair<string,int> ppp;
            ppp.first=it->second;
            ppp.second=0;
            mm.insert(ppp);
            it++;
        }
        for(auto it1=mm.begin();it1!=mm.end();it1++){
            cout<<it1->first<<endl;
        }
    }
    return 0;
}

总结:

考察对与stl容器的使用,主要使用了multimap,map容器,有些地方存在冗余,等二刷再精简。multimap键值可以重复,并且也会默认排序(按升序)。其中有用到strtok()函数,参考了链接: link此篇文章,当使用cin和scanf时,会使输入流停在空格或者换行前,再使用getline()函数会导致,多读入空格或读入一个空字符,所以可以在使用getline()读取下一个输入前,多用一次getline()把多余的空行读取掉,也可以用cin.ignore()函数。
string转char*链接: link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值