PAT 1022. Digital Library (30)

//1022. Digital Library (30)
#include "stdafx.h"


//注意split函数的用法,即将一个字符串按照“ ”将其分开。
//算法思想什么的很简单,和其他学生成绩排序的一样,主要就是用stl的sort函数
//最后三个case老通不过,主要是不能够对结果建立一个结构体都保存起来,这样会超内存空间。
//正确做法是:每当输入一个测试用例直接处理进行输出就可以了。


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

typedef struct Book
{
	int id;
	char title[85];
	char author[85];
	//vector<string> KeyWord;
	vector<string> keyword;

	char Publisher[85];
	int year;
}Book;

//vector<Book> book;
Book book[10000];

bool cmp(Book b1, Book b2)
{
	if (b1.id < b2.id)
	{
		return true;
	}
	return false;
}

//typedef struct Result
//{
//	int index;
//	char context[85];
//	vector<int> id;
//}Result;
//
vector<Result> res;
//Result res[1000];

int main()
{
	int N;
	int i;
	scanf("%d", &N);
	char KeyWords[60];
	
	for (i = 0;i<N;i++)
	{
		scanf("%d\n", &book[i].id);
		gets(book[i].title);
		gets(book[i].author);
		gets(KeyWords);
		//tmps = (tmp.KeyWords);
		//处理keywords;
		char *p;
		p = strtok(KeyWords, " ");
		while(p)
		{
			book[i].keyword.push_back(p);
			p = strtok(NULL, " ");
		}

		gets(book[i].Publisher);
		scanf("%d", &book[i].year);
	}

	sort(book, book+N, cmp);

	int M;
	int id;
	int j, k;
	char c[100];
	scanf("%d", &M);

	for (i = 0;i<M; i++)
	{
		/*cin >> id;*/
		scanf("%d: ", &id);
		gets(c);
		bool mark = false;

		printf("%d: %s\n", id, c);
		//Result r;

		//r.index = id;
		//strcpy( r.context, c);

		bool flag = true;
		if (id == 1)
		{
			for (j = 0;j<N;j++)
			{
				if (strcmp(book[j].title, c) == 0)
				{
					printf("%07d\n", book[j].id);
					flag = false;
				}
			}
		}
		else if(id == 2)
		{
			for (j = 0;j<N;j++)
			{
				if (strcmp(book[j].author, c) == 0)
				{
					printf("%07d\n", book[j].id);
					flag = false;
				}
			}
		}
		else if(id == 3)
		{
			for (j = 0;j<N;j++)
			{
				Book tmp = book[j];
				for (k = 0; k< (tmp.keyword).size();k++)
				{
					if (strcmp(book[j].keyword[k].c_str(), c)==0)
					{
						printf("%07d\n", book[j].id);
						flag = false;
						break;
					}
				}
			}
		}
		else if(id == 4)
		{
			for (j = 0;j<N;j++)
			{
				if (strcmp(book[j].Publisher, c) == 0)
				{
					printf("%07d\n", book[j].id);
					flag = false;
				}
			}
		}
		else if(id == 5)
		{
			for (j = 0;j<N;j++)
			{
				if (book[j].year == atoi(c))
				{
					flag = false;
					printf("%07d\n", book[j].id);
				}
			}
		}

		if (flag == true)
		{
			printf("Not Found\n");
		}
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值