1022 Digital Library(30分)

题目翻译:

接下来包含这 N 本书的具体信息,每本书的相关信息占 6 行:

第一行:书的 ID,一个 7 位数字。
第二行:书名,一个长度不超过 80 的字符串。
第三行:作者,一个长度不超过 80 的字符串。
第四行:关键词,每个关键词的长度均不超过 10,且关键词中不包含空格,关键词之间用空格隔开。
第五行:出版商,一个长度不超过 80 的字符串。
第六行:出版年限,一个在 [1000,3000] 范围内的 4 位数字。
一本书,只有一位作者,包含的关键词不超过 5 个。

总共不超过 1000 个不同的关键词,不超过 1000 个不同的出版商。

图书信息介绍完毕后,有一行包含一个整数 M,表示查询次数。

接下来 M 行,每行包含一个查询,具体格式如下:

1: a book title,查询书名。
2: name of an author,查询作者名。
3: a key word,查询关键词。
4: name of a publisher,查询出版商。
5: a 4-digit number representing the year,查询出版年限。注意,这个年限可能包含前导 0 。
对于每个查询,首先将查询信息输出在一行中。

接下来若干行,每行输出一个查询到的相关书籍的 ID,按升序顺序排列。

如果查询不到相关书籍,则输出 Not Found。

题解思路:

模拟即可

代码:

#include
using namespace std;
int N, M;//N:书本总数;M:需要查阅的总次数

//每本书都只有一个唯一的作者;关键字最多有5个;一共有不超过1000个的关键字或发行者
/*
1: a book title
2: name of an author
3: a key word
4: name of a publisher
5: a 4-digit number representing the year
*/

struct book {
	string ID;
	string title;
	string author;
	string keywords[6];
	string publisher;
	string year;
};

int main()
{
	cin >> N;
	vector Books;
	cin.ignore();//忽略换行符
	for (int i = 0;i < N;i++)
	{
		book temp_book;
		getline(cin, temp_book.ID);
		getline(cin, temp_book.title);
		getline(cin, temp_book.author);
		string input;
		getline(cin, input);
		istringstream iss(input);//将输入字符串按空格分隔成多个部分
		int count = 0;
		while (iss >> temp_book.keywords[count] && count < 5) {
			count++;
		}

		getline(cin, temp_book.publisher);
		getline(cin, temp_book.year);
		Books.push_back(temp_book);
	}
	cin >> M;
	cin.ignore();
	for (int i = 0;i < M;i++)
	{
		string message1;
		getline(cin, message1);
		cout << message1 << endl;
		string message2 = message1.substr(3);
		vector temp_save;
		switch (message1[0])
		{
		case '1':
			for (int j = 0;j < N;j++)
			{
				if (Books[j].title == message2)
					temp_save.push_back(Books[j].ID);
			}
			break;
		case '2':
			for (int j = 0;j < N;j++)
			{
				if (Books[j].author == message2)
					temp_save.push_back(Books[j].ID);
			}
			break;
		case '3':
			for (int j = 0;j < N;j++)
			{
				for (int m = 0;m < 5;m++)
				{
					if (Books[j].keywords[m] == message2)
					{
						temp_save.push_back(Books[j].ID);
						break;
					}
				}
			}
			break;
		case '4':
			for (int j = 0;j < N;j++)
			{
				if (Books[j].publisher == message2)
					temp_save.push_back(Books[j].ID);
			}
			break;
		case '5':
			for (int j = 0;j < N;j++)
			{
				if (Books[j].year == message2)
					temp_save.push_back(Books[j].ID);
			}
			break;
		}
		sort(temp_save.begin(), temp_save.end());
		if (temp_save.size() == 0)
			cout << "Not Found" << endl;
		else {
			for (auto k : temp_save)
				cout << k << endl;
			temp_save.clear();
		}
	}
}

坑点:

你可能感兴趣的:(算法,c++,数据结构)