> input && input != "quit") { ..._c++ primer plus习题及答案-第十六章">
赞
踩
1.
using namespace std; bool IsPalindrome(const string &); int main() { string input; cout << "Enter a string(quit to quit): "; while (cin >> input && input != "quit") { if (IsPalindrome(input)) cout << "是回文\n"; else cout << "不是回文\n"; cout << "Enter next string(quit to quit): "; } return 0; } bool IsPalindrome(const string & s) { string temp(s.rbegin(), s.rend()); return temp == s; }
2.
using namespace std; bool IsPalindrome(string &); int main() { string input; cout << "Enter a string(quit to quit): "; while (getline(cin, input) && input != "quit") { if (IsPalindrome(input)) cout << "是回文\n"; else cout << "不是回文\n"; cout << "Enter next string(quit to quit): "; } return 0; } bool IsPalindrome(string & s) { string temp; for (auto &a : s) { if (isalpha(a)) { a = tolower(a); temp = temp + a; } } string temp1(temp.rbegin(), temp.rend()); cout << temp; return temp1 == temp; }
3.
#include <iostream> #include<vector> #include<cstdlib> #include<cctype> #include<ctime> #include<string> #include<fstream> using namespace std; int main() { vector<string>wordlist; fstream inFile; inFile.open("helloword.txt"); if (!inFile.is_open()) { cout << "没有打开文件: "; exit(EXIT_FAILURE); } string temp; inFile >> temp; while (inFile.good()) { wordlist.push_back(temp); inFile >> temp; } std::srand(std::time(0)); int num = wordlist.size(); char play; cout << "Will you play a word game?<y/n> "; cin >> play; play = tolower(play); while (play == 'y') { string target = wordlist[std::rand() % num]; int length = target.length(); string attempt(length, '-'); string badchars; int guesses = 6; cout << "Guess my secret word. It has " << length << " letters, and you guess\n" << "one letter ar 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; } unsigned 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 choice: " << badchars << endl; cout << guesses << " bad guesses left\n"; } } if (guesses > 0) cout << "That's right!\n"; else cout << "sorry, the word is " << target << ".\n"; cout << "Will you play another? <y/n> "; cin >> play; play = tolower(play); } cout << "Bye\n"; return 0; }
4.
注意:unique的工作原理是把不重复的元素移到前面来,并没有真正的去除重复的元素。
#include <iostream> #include<algorithm> using namespace std; int reduce(long ar[], int n); int main() { long a[8] = { 5, 3, 3, 1, 5, 2, 6, 7 }; int i = reduce(a, 8); cout << "返回后的元素是" << i << "个\n"; return 0; } int reduce(long ar[], int n) { sort(ar, ar + n); long * a; a = unique(ar, ar + n); return a - ar; }
5.
#include <iostream> #include<algorithm> using namespace std; template<typename T> int reduce(T ar[], int n); int main() { long a[8] = { 1, 3, 3, 4, 5, 6, 6, 7 }; int i = reduce(a, 8); cout << "返回后的元素是" << i << "个\n"; string b[] = { "asd", "qwe", "zxc","hhh", "qwe" }; i = reduce(b, 5); cout << "返回后的元素是" << i << "个\n"; return 0; } template<typename T> int reduce(T ar[], int n) { sort(ar, ar + n); T * a; a = unique(ar, ar + n); return a - ar; }
6.
#include <iostream> #include <queue> #include <cstdlib> #include <ctime> using namespace std; class Customer { private: long arrive; int processtime; public: Customer() { arrive = processtime = 0; } void Set(long when); long when() const { return arrive; } int ptime() const { return processtime; } }; const int MIN_PER_HR = 60; bool newcustomer(double x); int main() { srand(time(0)); cout << "Case Study: Bank of Heather Automatic Teller\n"; cout << "Enter maximun size of queue: "; unsigned int qs; cin >> qs; queue<Customer>line; cout << "Enter the average number of simulation hours: "; int hours; cin >> hours; long cyclelimit = MIN_PER_HR * hours; cout << "Enter the average number of customers per hour: "; double perhour; cin >> perhour; double min_per_cust; min_per_cust = MIN_PER_HR / perhour; Customer temp; long turnaways = 0; long customers = 0; long served = 0; long sum_line = 0; int wait_time = 0; long line_wait = 0; 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()) { temp = line.front(); wait_time = temp.ptime(); line_wait += cycle - temp.when(); served++; line.pop(); } if (wait_time > 0) wait_time--; sum_line += line.size(); } if (customers > 0) { cout << "customers accepted: " << customers << endl; cout << " customers served: " << served << endl; cout << " turnaway: " << 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 (rand() * x / RAND_MAX < 1); } void Customer::Set(long when) { processtime = rand() % 3 + 1; arrive = when; }
#include <iostream> #include <vector> #include <cstdlib> #include <ctime> #include <algorithm> using namespace std; vector<int>lotto(int n, int m); int main() { vector<int> winners; winners = lotto(51, 6); for (auto b : winners) cout << b << " "; return 0; } vector<int>lotto(int n, int m) { vector<int>temp(n); for (int i = 0; i < n; i++) temp[i] = i + 1; random_shuffle(temp.begin(), temp.end()); vector<int>choice(m); for (int i = 0; i < m; i++) choice[i] = temp[i]; return choice; }
#include <iostream> #include <set> #include <string> #include <cstdlib> #include <ctime> #include <algorithm> #include <iterator> using namespace std; int main() { set<string> mat; set<string> pat; set<string> Union; ostream_iterator<string, char> out(cout, " "); cout << "Enter mat's friends: (empty line to quit): "; string temp; while (getline(cin, temp) && temp != "\0") { mat.insert(temp); cout << "Enter mat's friends: (empty line to quit): "; } cout << endl; cout << "These are mat's friend: " << endl; copy(mat.begin(), mat.end(), out); cout << endl; cout << "Enter pat's friends: (empty line to quit): "; while (getline(cin, temp) && temp != "\0") { pat.insert(temp); cout << "Enter mat's friends: (empty line to quit): "; } cout << "These are pat's friend: " << endl; copy(pat.begin(), pat.end(), out); cout << endl; set_union(mat.begin(), mat.end(), pat.begin(), pat.end(), insert_iterator<set<string>>(Union, Union.begin())); cout << "these are union: " << endl; copy(Union.begin(), Union.end(), out); return 0; }
#include <iostream> #include <set> #include <string> #include <cstdlib> #include <ctime> #include <list> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { vector<int>v; srand(time(0)); for (int i = 0; i < 100000; i++) { v.push_back(rand()); } vector<int>vi = v; list<int>li(v.begin(), v.end()); clock_t start = clock(); sort(vi.begin(), vi.end()); clock_t End = clock(); cout << "time is: " << (double)(End - start) / CLOCKS_PER_SEC << "s.\n"; start = clock(); li.sort(); End = clock(); cout << "time is: " << (double)(End - start) / CLOCKS_PER_SEC << "s.\n"; copy(v.begin(), v.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 << "time is: " << (double)(End - start) / CLOCKS_PER_SEC << "s.\n"; }
#include <iostream> #include<string> #include<vector> #include<algorithm> #include<memory> using namespace std; struct Review { std::string title; int rating; double price; }; bool operator<(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2); bool worseThan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2); bool betterthan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2); bool expensivethan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2); bool cheapthan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2); bool FillReview(Review & rr); void ShowReview(const shared_ptr<Review> & rr); void show(); int main() { using namespace std; vector<shared_ptr<Review>> books; Review temp; while (FillReview(temp)) { shared_ptr<Review> newtemp(new Review(temp)); books.push_back(newtemp); } if (books.size() > 0) { cout << "Thank you. you entered :" << books.size() << " ratings:\n"; int input; show(); cout << "choose a type to show: "; while (cin >> input && input != 7) { switch (input) { case 1: break; case 2: sort(books.begin(), books.end()); break; case 3: sort(books.begin(), books.end(), worseThan); break; case 4: sort(books.begin(), books.end(), betterthan); break; case 5: sort(books.begin(), books.end(), cheapthan); break; case 6: sort(books.begin(), books.end(), expensivethan); break; } cout << "Rating\tBook\tPrice\n"; for_each(books.begin(), books.end(), ShowReview); cout << "choose a type to show: "; } } else cout << "No entries."; cout << "Bye.\n"; return 0; } bool operator<(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2) { if (r1->title < r2->title) return true; else if (r1->title == r2->title && r1->rating < r2->rating) return true; else return false; } bool worseThan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2) { if (r1->rating < r2->rating) return true; else return false; } bool betterthan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2) { if (r1->rating > r2->rating) return true; else return false; } bool expensivethan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2) { if (r1->price > r2->price) return true; else return false; } bool cheapthan(const shared_ptr<Review> & r1, const shared_ptr<Review> & r2) { if (r1->price < r2->price) return true; else return false; } 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; std::cout << "Enter book price: "; std::cin >> rr.price; if (!std::cin) return false; while (std::cin.get() != '\n') continue; return true; } void ShowReview(const shared_ptr<Review> & rr) { std::cout << rr->rating << "\t" << rr->title << '\t' << rr->price << std::endl; } void show() { cout << "1.Display in original order\n"; cout << "2.Display in alphabetical order\n"; cout << "3.Display in ascending order by rating\n"; cout << "4.Display in descending order by rating\n"; cout << "5.Display in ascending order by price\n"; cout << "6.Displayed in descending order by price\n"; cout << "7.quit\n"; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。