C.Primer.Plus(第六版)第16章 编程练习
2017-08-11 14:36
417 查看
//16.1 #include <iostream> #include <string> using namespace std; bool isPalindrome(const string &); int main(){ cout<<"Please enter a string type data:"; string str1; while(cin>>str1 && str1 != "quit"){ for(int i=0;i<str1.length();++i){ if(!islower(str1[i])){ cout<<"The input must be a lowercase character,bye!"<<endl; return 0; } } isPalindrome(str1); cout<<"Please enter a string type data:"; } } bool isPalindrome(const string & str){ for(int i = 0,j = str.length()-1; i<=j;++i,--j) if(str[i] != str[j]){ cout<<"the string dont't match Palindrome type,bye!"<<endl; return 0; } cout<<"Input string is a Palindrome number."<<endl; return 1; }
//16.2 #include <iostream> #include <string> using namespace std; bool isPalindrome(const string &); int main(){ cout<<"Please enter a string type data:"; string str1; while(cin>>str1 && str1 != "quit"){ string temp; for(int i=0;i<str1.length();++i){ if(isalpha(str1[i])) temp.push_back(tolower(str1[i])); } str1 =temp; isPalindrome(str1); cout<<"Please enter a string type data:"; } } bool isPalindrome(const string & str){ for(int i = 0,j = str.length()-1; i<=j;++i,--j) if(str[i] != str[j]){ cout<<"the string dont't match Palindrome type,bye!"<<endl; return 0; } cout<<"Input string is a Palindrome number."<<endl; return 1; }
//16.3 // hangman.cpp #include <iostream> #include <fstream> #include <vector> #include <string> #include <cstdlib> #include <ctime> #include <cctype> using std::string; const int NUM = 26; int main() { using namespace std; std::srand(std::time(0)); vector<std::string> str_arr; string temp; ifstream fopen; fopen.open("data.txt"); if(!fopen.is_open()) { cout<<"Could not open the data file"<<endl; exit(EXIT_FAILURE); } fopen>>temp; while(fopen.good()) { str_arr.push_back(temp); fopen>>temp; } char play; cout<<"Will you play a word game? <y/n> "; cin>>play; play = tolower(play); while(play == 'y') { string target = str_arr[std::rand() % str_arr.size()]; int length = target.length(); string attempt(length,'-'); string badchars; int guesses = 6; cout<<"Guess my secret word. It has "<<length <<" length, and you guess\n" <<"one letter at a time.You get "<<guesses <<" wrong guesses.\n"; cout<<"Your word: "<<attempt<<endl; while(guesses > 0 && attempt != target) { char letter; cout<<"Guess a letter: "; cin>>letter; if(badchars.find(letter) != string::npos || attempt.find(letter) !=string::npos) { cout<<"You already guessed that. Try again.\n"; continue; } int loc = target.find(letter); if(loc == string::npos) { cout<<"Oh,bad guess!\n"; --guesses; badchars += letter; } else { cout<<"Good guess!\n"; attempt[loc] = letter; loc = target.find(letter,loc+1); while(loc != string::npos) { attempt[loc] = letter; loc = target.find(letter,loc+1); } } cout<<"Your word: "<<attempt<<endl; if(attempt != target) { if(badchars.length()>0) cout<<"Bad choices:"<<badchars<<endl; cout<<guesses<<"bad guesses left\n"; } } if(guesses > 0) cout<<"That's right!\n"; else co 4000 ut<<"Sorry,the word is "<<target<<".\n"; cout<<"Will you plat another? <y/n>"; cin>>play; play = tolower(play); } cout<<"Bye\n"; return 0; }
//16.4 #include <iostream> #include <vector> #include <algorithm> using namespace std; int reduce(long ar[],int n); bool compare(long a,long b) { return a<b;//increase //return a>b;//decrease } int main() { long lo[6] = {2,3,44,3,3,2}; int count = reduce(lo,6); for(int i = 0;i<count;++i) cout<<lo[i]<<" "; cout<<endl; } int reduce(long ar[],int n) { vector<long> arr; for(int i = 0;i<n;i++) arr.push_back(ar[i]); sort(arr.begin(),arr.end(),compare); vector<long>::iterator new_end = unique(arr.begin(),arr.end());//将有效数据排序,将有效结尾存储下来 arr.erase(new_end,arr.end());//删除多余的数据 int count = 0; for(vector<long>::iterator temp = arr.begin();temp != arr.end();++temp) ar[count++] = (*temp); return count; }
//16.5 #include <iostream> #include <string> //忘记定义string类... #include <vector> #include <algorithm> using namespace std; template <class T> int reduce(T ar[],int n); int main() { string test[6] = {"just","different","amazing","MDF","Magic","amazing"}; int count = reduce(test,6); for(int i = 0;i<count;++i) cout<<test[i].c_str()<<" "; cout<<endl; long lo[6] = {2,3,44,3,3,2}; int size = reduce(lo,6); for(int i = 0;i<size;++i) cout<<lo[i]<<" "; cout<<endl; return 0; } template <class T> int reduce(T ar[],int n) { vector<T> arr; for(int i = 0;i<n;i++) arr.push_back(ar[i]); sort(arr.begin(),arr.end()); vector<T>::iterator new_end = unique(arr.begin(),arr.end());//将有效数据排序,将有效结尾存储下来 arr.erase(new_end,arr.end());//删除多余的数据 int count = 0; for(vector<T>::iterator temp = arr.begin();temp != arr.end();++temp) ar[count++] = (*temp); return count; }
// 16.6 仅仅是简单的使用queue模板类的方法 #include <iostream> #include <queue> #include <cstdlib> #include <ctime> const int MIN_PER_HR = 60; bool newcustomer(double x); class Customer { private: long arrive;// arrival time for customer int processtime;//processing time for customer 交易时间 public: Customer(){arrive = processtime = 0;} void set(long when) { processtime = std::rand() % 3 + 1; arrive = when; } long when() const {return arrive;} int ptime() const {return processtime;} }; typedef Customer Item; int main() { using namespace std; std::srand(std::time(0)); cout<<"Case Study:Bank of Heather Automatic Teller\n"; cout<<"Enter maximum size of queue:"; int qs; cin>>qs; queue<Item> line;// cout<<"Enter the number of simulation hours: "; int hours; cin>>hours;//测试时间 // simulation will run 1 cycle per minute long cyclelimit = MIN_PER_HR * hours;//循环次数 cout<<"Enter the average number of customer per hour: "; double perhour; cin>>perhour;//一小时多少客户 double min_per_cust; min_per_cust = MIN_PER_HR / perhour;//每分钟多少客户 Item temp;// new customer data long turnaways = 0;//turned away by full queue 被拒绝的客户 long customers = 0;//joined the queue long served = 0;//served during the simulation 服务人数 long sum_line = 0;//cumulative line lentgth 累计长度 int wait_time = 0;//time until autoteller is free long line_wait = 0;//cumulative time in line for(int cycle = 0;cycle<cyclelimit;cycle++) { if(newcustomer(min_per_cust))//有客户访问 { if(line.size() == qs)//队列是否满员// turnaways++; else { customers++; temp.set(cycle);//将进队时的时间记录下来,用于记录在队列中的时间,以及操作时间 line.push(temp);//入队// } } if(wait_time<=0 && !line.empty())//如果客户操作完成 { line.pop();//出队并将指针指向新的头结点 wait_time = temp.ptime();//得到被释放头结点的操作时间 line_wait += cycle - temp.when();//从排队到开始操作的时间 served++; } if(wait_time>0) wait_time--; sum_line += line.size();// } if(customers>0) { cout<<"customers accepted: "<<customers<<endl; cout<<" customers served: "<<served<<endl; cout<<" turnaways:"<<turnaways<<endl; cout<<"average queue size:"; cout.precision(2); cout.setf(ios_base::fixed,ios_base::floatfield); cout<<(double)sum_line/cyclelimit <<endl; cout<<"average wait time: " <<(double)line_wait /served <<" minutes\n"; } else cout<<"No customers!\n"; cout<<"Done!\n"; return 0; } bool newcustomer(double x) { return (std::rand() * x / RAND_MAX <1); }
//16.7 #include <iostream> #include <ctime> #include <vector> #include <algorithm> using namespace std; vector<int> lotto(int x,int y); int main() { srand(time(0)); vector<int> winners; winners = lotto(51,6); for(int i =0;i<winners.size();i++) cout<<winners[i]<<" "; cout<<endl; } vector<int> lotto(int x, int y) { vector<int> temp; vector<int> output; for(int i =0;i<x;++i) temp.push_back(i+1); for(int i =0;i<y;++i) { random_shuffle(temp.begin(),temp.end()); output.push_back(temp[0]); } return output; }
//16.8 #include <iostream> #include <string> #include <list> #include <vector> #include <algorithm> #include <iterator> int main() { using namespace std; list<string> mat,pat; cout<<"please enter mat's friend list(\"quit\" to end):"; string temp; while(cin>>temp && temp != "quit"){ mat.push_back(temp); cout<<"please enter mat's friend list:"; } cout<<"please enter pat's friend list(\"quit\" to end):"; while(cin>>temp && temp != "quit"){ pat.push_back(temp); cout<<"please enter pat's friend list(\"quit\" to end):"; } mat.sort(),mat.unique(); pat.sort(),pat.unique(); for(list<string>::iterator it = mat.begin();it != mat.end();++it) cout<<(*it)<<" , "; cout<<endl; for(list<string>::iterator it = pat.begin();it != pat.end();++it) cout<<(*it)<<" , "; cout<<endl; vector<string> sum(pat.size()+mat.size()); copy(mat.begin(),mat.end(),sum.begin()); copy(pat.begin(),pat.end(),(sum.begin()+mat.size())); sort(sum.begin(),sum.end()); vector<string>::iterator new_end = unique(sum.begin(),sum.end()); sum.erase(new_end,sum.end()); copy(sum.begin(),sum.end(),ostream_iterator<string>(cout," ")); cout<<endl; return 0; }
//16.9 #include <iostream> #include <vector> #include <list> #include <ctime> #include <algorithm> const int NUM = 100000; int main() { using namespace std; srand(time(0)); vector<int> vi0(NUM); for(int i =0;i<vi0.size();++i) vi0[i]= rand() % 100 + 1; vector<int> vi(vi0); list<int> li(vi0.begin(),vi0.end()); clock_t start = clock(); sort(vi.begin(),vi.end()); clock_t end = clock(); cout<<"STL algorithm time cost is "<<(double)(end-start)/CLOCKS_PER_SEC<<endl; start = clock(); li.sort(); end = clock(); cout<<"list member function time cost is"<<(double)(end-start)/CLOCKS_PER_SEC<<endl; copy(vi0.begin(),vi0.end(),li.begin()); start = clock(); copy(li.begin(),li.end(),vi.begin()); sort(vi.begin(),vi.end()); copy(vi.begin(),vi.end(),li.begin()); end = clock(); cout<<"Compromise method time cost is"<<(double)(end-start)/CLOCKS_PER_SEC<<endl; return 0; }
//16.10 #include <iostream> #include <string> #include <vector> #include <algorithm> #include <memory> struct Review{ std::string title; int rating; double price; }; bool FillReview(Review & rr); bool operator<( const std::shared_ptr<Review> & r1,const std::shared_ptr<Review> & r2); bool showRating(const std::shared_ptr<Review> & r1, const std::shared_ptr<Review> & r2); bool showPrice(const std::shared_ptr<Review> & r1, const std::shared_ptr<Review> & r2); void ShowReview(const std::shared_ptr<Review> & rr); void Showmenu(); int main() { using namespace std; vector<shared_ptr<Review>> books; Review temp; while(FillReview(temp)) books.push_back(shared_ptr<Review>(new Review(temp))); vector<shared_ptr<Review>> new_ord(books); //按照题目要求分别创建对应的shared_ptr对象 sort(new_ord.begin(),new_ord.end()); //按字母排序 vector<shared_ptr<Review>> new_pri(books);//按价格排序对象 sort(new_pri.begin(),new_pri.end(),showPrice); vector<shared_ptr<Review>> new_rat(books);//按评分排序的对象 sort(new_rat.begin(),new_rat.end(),showRating); if(books.size() > 0) { cout<< "Thank you,You entered the following " << books.size() << " ratings.\n"; Showmenu(); char key; cin>>key; while(key != 'q') { cout<<"title\t"<<"rating\t"<<"price\n"; switch(key) { case'1':for_each(books.begin(),books.end(), ShowReview); break; case'2': for_each(new_ord.begin(),new_ord.end(), ShowReview); break; case'3':for_each(new_pri.begin(), new_pri.end(), ShowReview); break; case'4':for_each(new_rat.begin(), new_rat.end(), ShowReview); break; case'5':for_each(new_pri.rbegin(), new_pri.rend(), ShowReview);//反向输出 break; case'6':for_each(new_rat.rbegin(), new_rat.rend(), ShowReview); break; case 'q':break; default: std::cout << "Error input,please enter the true type:\n"; break; } Showmenu(); cin >> key; } } else cout<<"books is empty,end!\n"; return 0; } bool FillReview(Review & rr) { std::cout<<"Enter book title (quit to quit): "; std::getline(std::cin,rr.title); if(rr.title == "quit") return false; std::cout<<"Enter book rating: "; std::cin>>rr.rating; if(!std::cin) return false; while(std::cin.get() != '\n') continue; std::cout<<"Enter book price: "; std::cin>>rr.price; if(!std::cin) return false; while(std::cin.get() != '\n') continue; return true; } bool operator<( const std::shared_ptr<Review> & r1,const std::shared_ptr<Review> & r2) { if (r1->title < r2->title) return true; else return false; } bool showRating(const std::shared_ptr<Review> & r1, const std::shared_ptr<Review> & r2) //默认升序 { if (r1->rating < r2->rating) return true; else return false; } bool showPrice(const std::shared_ptr<Review> & r1, const std::shared_ptr<Review> & r2) { if (r1->price < r2->price) return true; else return false; } void ShowReview(const std::shared_ptr<Review> & rr) { std::cout<<rr->title<<"\t"<<rr->rating<<"\t"<<rr->price<<std::endl; } void Showmenu() { std::cout<<"display by different choice:\n" <<"1:ordinary order "<<"2:Alphabetical order\t"<<" 3:Ascending price\n"<<"4:Ascending rating\t" <<"5:Descending order price\t"<<"6:Descending order rating\n"<<"q:quit\n"; }
相关文章推荐
- C++ primer plus第六版课后编程练习答案:7.1
- c++primer plus 第六版 第2章 编程练习之路
- 《C++ Primer Plus(第六版)》(41)(第十七章 输入、输出和文件 编程练习和答案1)
- C ++ Primer Plus 第六版 第九章编程练习答案
- C ++ Primer Plus 第六版 第十章编程练习答案
- C++primer plus第六版课后编程练习答案3.1
- C++primer plus第六版课后编程练习答案5.9
- C++primer plus第六版课后编程练习答案8.7
- C++ primer plus第六版课后编程练习答案:6.4
- C++primer plus第六版课后编程练习答案10.7
- C++ Primer Plus第六版 第十六章 编程练习答案
- C++ Primer Plus 第六版_编程练习(4)(Chapter_five 1-5)
- C++ Primer Plus (第六版) 编程练习2.7
- C++ primer plus第六版课后编程练习答案:7.2
- C++ PRIMER PLUS (第六版) 中文版 第七章编程练习答案
- C++ Primer Plus第六版 第四章 编程练习答案
- C++ Primer Plus第六版编程练习11.2解答
- c++ primer plus 第六版第三章编程练习答案
- C++ Primer Plus第六版 第六章 编程练习答案
- C++ Primer Plus第六版 第七章 编程练习答案