zoukankan      html  css  js  c++  java
  • PAT A 1022. Digital Library (30)【结构体排序检索】

    https://www.patest.cn/contests/pat-a-practise/1022

    直接模拟,

    输入,按id排序,检索

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    struct book		//图书结构
    {
    	string id;
    	string title;	
    	string author;
    	int k;		//关键词数量
    	string key[5];
    	string pub;
    	string year;
    };
    
    bool cm(const book &b1,const book &b2);	//根据id排序
    
    int main()
    {
    	int n,m,i,j,k;
    	string temp_s;
    	book temp_b,*bks;
    	cin>>n;
    	bks=new book [n];
    	cin.get();          //字符串输入过滤回车与空格
    	for(i=0;i<n;i++)	//输入书的信息
    	{
    		getline(cin,bks[i].id);
    		getline(cin,bks[i].title);
    		getline(cin,bks[i].author);
    		getline(cin,temp_s);
    		for(j=0,k=0;j<temp_s.size();j++)
    		{
    			if(temp_s[j]!=' ')
    				bks[i].key[k]+=temp_s[j];
    			else
    				k++;
    		}
    		bks[i].k=k+1;
    		getline(cin,bks[i].pub);
    		getline(cin,bks[i].year);
    	}
    	sort(bks,bks+n,cm);	//根据id排序
    	
    	cin>>m;
    	int cl;
    	int flag;	//标志是否有找到符合条件的书
    	for(i=0;i<m;i++)
    	{
    		cin>>cl;
    		cin.get();	//跳过":"
    		cin.get();	//跳过" "
    		flag=0;
    		getline(cin,temp_s);
    		cout<<cl<<": "<<temp_s<<endl;
    		for(j=0;j<n;j++)
    		{
    			switch(cl)
    			{
    			case 1:if(bks[j].title==temp_s)
    				   {
    					   cout<<bks[j].id<<endl;
    					   flag=1;
    				   }
    				break;
    			case 2:if(bks[j].author==temp_s)
    				   {
    					   cout<<bks[j].id<<endl;
    					   flag=1;
    				   }
    				break;
    			case 3:for(k=0;k<bks[j].k;k++)
    					if(bks[j].key[k]==temp_s)
    					{
    						cout<<bks[j].id<<endl;
    						flag=1;
    					}
    				   break;
    			case 4:if(bks[j].pub==temp_s)
    				   {
    					   cout<<bks[j].id<<endl;
    					   flag=1;
    				   }
    				break;
    			case 5:if(bks[j].year==temp_s)
    				   {
    					   cout<<bks[j].id<<endl;
    					   flag=1;
    				   }
    				break;
    			}
    		}
    		if(flag==0)
    			cout<<"Not Found
    ";
    	}
    
    	return 0;
    }
    
    bool cm(const book &b1,const book &b2)
    {
    	return b1.id<b2.id;
    }
    
    
  • 相关阅读:
    链接数据库
    Ajax 密码验证
    for循环 打印菱形 空 和 实
    for 循环 正方形
    面向对象
    用正则表达式 匹配手机号码
    正则表达式
    js 中 == 和=== 有什么区别?
    js 删除
    封装函数增删改查
  • 原文地址:https://www.cnblogs.com/demian/p/6090353.html
Copyright © 2011-2022 走看看