http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
Chapter 8 // Exercise 7
7. Read five names into a vector<string> name, then prompt the user for the ages of the people names and store the ages in a vector<double> age. Then print out the five (name[i],age[i]) pairs. Sort the names (sort(name.begin(), name.end())) and print out the (name[i], age[i]) pairs. The tricky part here is to get the age vector in the correct order to match the sorted name vector. Hint: Before sorting name, take a copy and use that to make a copy of age in the right order after sorting name.
#include "stdafx.h" #include "std_lib_facilities.h" //print vectors to the screen void print(const vector<double>& ages, const vector<string>& names) { for (int i = 0; i < ages.size(); ++i) { cout << names[i] << ": " << ages[i] << endl; } cout << "--------------------------------" << endl; } //read five names into a vector string vector<string> getNames(vector<string>& v) { string name; for (int i = 0; i < 5; ++i) { cout << "Name Please: "; cin >> name; v.push_back(name); cout << endl; } return v; } //read 5 ages for names vector<double> getAges(const vector<string>& name, vector<double>& v_age) { double age; for (int i = 0; i < name.size(); ++i) { cout << "Age for " << name[i] << ": "; cin >> age; v_age.push_back(age); cout << endl; } return v_age; } //compare copy of name vector to new to sort ages correctly void sortNames(vector<string> name_copy, vector<string>& name, vector<double> age_copy, vector<double>& age) { sort(name.begin(), name.end()); //sort actual names //go through each member of sorted name for (int i = 0; i < name.size(); ++i) { //go through each member of original copy name for (int j = 0; j < name.size(); ++j) { //if sorted name matches original if (name[i] == name_copy[j]) { //assign original age to new position to match sorted vector age[i] = age_copy[j]; } } } } int main() { //get names vector<string> names; getNames(names); //get ages vector<double> ages; getAges(names, ages); //print original vectors print(ages, names); //sort the vectors using copies to compare sortNames(names, names, ages, ages); //print vectors again to see changes print(ages, names); keep_window_open(); return 0; }
Chapter 8 // Exercise 8
8. Then, do that exercise again but allowing an arbitrary number of names.
The only part of this I changed was the function to get the names:
The only part of this I changed was the function to get the names:
//read five names into a vector string vector<string> getNames(vector<string>& v) { string name; cout << "Press 'q' to stop entering names" << endl; while(name != "q") { cout << "Name Please: "; cin >> name; if (name == "q") break; v.push_back(name); cout << endl; } return v; }
No comments:
Post a Comment