clipboard.png

熟练运用set和map有奇效;
最主要的目光应该聚焦在输入上;
当出现多个同一行输入的字符串是,如果要使用string录入,可以采取如下方式,其中使用getchar来得到换行符,从而标志输入是否结束:

while(cin>>key){
            mpKey[key].insert(id);
            c=getchar();
            if(c=='\n')
                break;
        }

全部代码如下所示:

#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<set>
#include<string>
#include<map>
using namespace std;
using std::map;
using std::set;
map<string,set<int> >mpTitle,mpAuthor,mpKey,mpPub,mpYear;

void query(map<string,set<int> >& mp,string& str){
    if(mp.find(str)==mp.end())
        printf("Not Found\n");
    else{
        for(set<int>::iterator it=mp[str].begin();it!=mp[str].end();it++){
            printf("%07d\n",*it);
        }
    }
}
int main(){
    int n,m,id,type;
    string title,author,key,pub,year;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&id);
        char c=getchar();
        getline(cin,title);
        mpTitle[title].insert(id);
        getline(cin,author);
        mpAuthor[author].insert(id);
        while(cin>>key){
            mpKey[key].insert(id);
            c=getchar();
            if(c=='\n')
                break;
        }
        getline(cin,pub);
        mpPub[pub].insert(id);
        getline(cin,year);
        mpYear[year].insert(id);
    }
    string temp;
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        scanf("%d: ",&type);
        getline(cin,temp);
        cout<<type<<": "<<temp<<endl;
        if(type==1)
            query(mpTitle,temp);
        else if(type==2)
            query(mpAuthor,temp);
        else if(type==3)
            query(mpKey,temp);
        else if(type==4)
            query(mpPub,temp);
        else
            query(mpYear,temp);
    }
    system("pause");
    return 0;
}

宋霖轩
16 声望4 粉丝

克哈的霓虹都为我闪烁


« 上一篇
PAT A1071
下一篇 »
PAT A1020