C++ primer plus第六版课后编程题答案16.10


main169.cpp

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cctype>
#include <memory>
using namespace std;
static struct Review{
	string title;
	int rating;
	double price;
};
static bool sortT(const Review &r1,const Review &r2)
{
		if(r1.title<r2.title)
			return true;
		else
			return false;
};
static bool sortR(const Review &r1,const Review &r2)
{
		if(r1.rating<r2.rating)
			return true;
		else
			return false;
};
static bool sortP(const Review &r1,const Review &r2)
{
		if(r1.price<r2.price)
			return true;
		else
			return false;
};


//static bool FillReview(shared_ptr<Review> *rr)
static bool FillReview(Review &rr)
{
	//rr=new Review;
	shared_ptr<Review> ps(new Review);//创建一个shared_ptr指针
	cout<<"\nEnter book title (q to quit):";
	getline(cin,ps->title);
	//if(rr.title[0]=='q'&&sizeof(rr.title)==1)//这里是ps好吧,我就奇了怪了
	if(ps->title=="q")
		return false;
	cout<<"\nEnter the book rating:";
	cin>>ps->rating;
	cout<<"\nEnter the price:";
	cin>>ps->price;
	if(!cin)
		return false;
	while(cin.get()!='\n')
		continue;
	rr=*ps;//p667  ps是一个指针,对其解除*
	return true;
};
static void output(const Review &rr)
{
	cout<<rr.rating<<"\t"<<rr.title<<"\t"<<rr.price<<endl;
}



void main1610()
{
	//vector<shared_ptr<Review> > books;
	vector<Review> books;
	//shared_ptr<Review> *temp;
	Review temp;
	while(FillReview(temp))
		books.push_back(temp);
	if(books.size()>0)
	{
		cout<<"Thank you ,You entered the following "
			<<books.size()<<" ratings:"<<endl
			<<"Rating\tBook\tPrices"<<endl;
		for_each(books.begin(),books.end(),output);
	}
	cout<<"Please select the sort:"<<endl
		<<"t.sort by title       r.sort by rating"<<endl
		<<"p.sort by price       f.sort by title reserve"<<endl
		<<"q.quit"<<endl;//我只演示一个逆序输出f
	char select;
	cin>>select;
	while(select!='q')
	{
		/*
		while(cin.get()!='\n')
			continue;*/
		switch(select)
		{
			case 't':
				sort(books.begin(),books.end(),sortT),
				cout<<"sort by title:"<<endl;
				for_each(books.begin(),books.end(),output),
				cout<<endl;
				break;
			case 'f':
				sort(books.begin(),books.end(),sortT),
				cout<<"sort by title:"<<endl;
				//for_each(books.rend(),books.rbegin(),output),
				for_each(books.rbegin(),books.rend(),output),//这是关键
				cout<<endl;
				break;
			case 'r':
				sort(books.begin(),books.end(),sortR),
				cout<<"sort by Rating:"<<endl;
				for_each(books.begin(),books.end(),output),
				cout<<endl;
				break;
			case 'p':
				sort(books.begin(),books.end(),sortP),
				cout<<"sort by prices:"<<endl;
				for_each(books.begin(),books.end(),output),
				cout<<endl;
				break;
			case 'q':
			default:
				break;
		}
	cout<<"Please select the sort:"<<endl
		<<"t.sort by title       r.sort by rating"<<endl
		<<"p.sort by price       f.sort by title reserve"<<endl
		<<"q.quit"<<endl;//我只演示一个逆序输出f
			
			cin>>select;
	
	}

	cout<<"Bye"<<endl;
	cin.get();




}

 

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注