Accelerated C++ 习题解答 第5章

来源:互联网 发布:一元洗车软件 编辑:程序博客网 时间:2024/05/16 11:22

习题解答部分来自网上已有解答

EX.5-0

1)

#include <iostream>#include <vector>#include <string>#include <cctype>#include <conio.h> using std::cin;using std::cout;using std::endl;using std::vector;using std::string; vector<string> split (conststring& s){   vector<string>ret;   typedef string::size_type string_size;   string_size i = 0;    while (i != s.size()) {      while (i != s.size() && isspace(s[i]))        ++i;       string_size j = i;       while (j != s.size() && !isspace(s[j]))        ++j;       if (i != j) {        ret.push_back(s.substr(i,j-i));        i = j;      }   }   return ret;} int main(){   string s;   while (getline (cin, s)) {      vector<string>v = split(s);       for (vector<string>::size_type i = 0; i !=v.size(); ++i) {        cout <<v[i] << endl;      }   }   getch();   return 0;}

2)

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <conio.h> using namespace std; string::size_type width(constvector<string>& v){   string::size_typemaxlen = 0;   for (vector<string>::size_type i = 0; i !=v.size(); ++i)      maxlen =max(maxlen, v[i].size());   return maxlen;} vector<string> frame(constvector<string>& v){   vector<string>ret;   string::size_typemaxlen = width(v);   string border(maxlen+ 4, '*');    ret.push_back(border);   for (vector<string>::size_type i = 0; i != v.size();++i) {      ret.push_back("* " + v[i] + string(maxlen-v[i].size(),' ') +"*");   }   ret.push_back(border);   return ret;} int main(){   vector<string>content, output;    string s;   while (getline(cin, s)) {      content.push_back(s);   }   output = frame(content);   for (vector<string>::size_type i = 0; i !=output.size(); ++i) {      cout <<output[i] << endl;   }   getch();   return 0;}

3)

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <conio.h> using namespace std; string::size_type width(constvector<string>& v){   string::size_typemaxlen = 0;   for (vector<string>::size_type i = 0; i !=v.size(); ++i)      maxlen =max(maxlen, v[i].size());   return maxlen;} vector<string> frame(constvector<string>& v){   vector<string>ret;   string::size_typemaxlen = width(v);   string border(maxlen+ 4, '*');    ret.push_back(border);   for (vector<string>::size_type i = 0; i !=v.size(); ++i) {      ret.push_back("* " + v[i] + string(maxlen-v[i].size(),' ') +"*");   }   ret.push_back(border);   return ret;} vector<string> vcat(constvector<string>& top,constvector<string>& bottom){   vector<string>ret = top;   ret.insert(ret.end(),bottom.begin(), bottom.end());   return ret;} int main(){   vector<string>content, output;    string s;   while (getline(cin, s)) {      content.push_back(s);   }   output =vcat(content, frame(content));   for (vector<string>::size_type i = 0; i !=output.size(); ++i) {      cout <<output[i] << endl;   }   getch();   return 0;}

4)

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <conio.h> using namespace std; string::size_type width(constvector<string>& v){   string::size_typemaxlen = 0;   for (vector<string>::size_type i = 0; i !=v.size(); ++i)      maxlen =max(maxlen, v[i].size());   return maxlen;} vector<string> frame(constvector<string>& v){   vector<string>ret;   string::size_typemaxlen = width(v);   string border(maxlen+ 4, '*');    ret.push_back(border);   for (vector<string>::size_type i = 0; i !=v.size(); ++i) {      ret.push_back("* " + v[i] + string(maxlen-v[i].size(),' ') +"*");   }   ret.push_back(border);   return ret;}  vector<string> hcat(constvector<string>& left,constvector<string>& right){   vector<string>ret;   string::size_type  width1 = width(left) + 1;   vector<string>::size_typei = 0, j = 0;   while (i != left.size() || j != right.size()) {      string s;       if (i != left.size()) {        s = left[i++];      }       s += string(width1- s.size(), ' ');       if (j != right.size()) {        s += right[j++];      }           ret.push_back(s);   }   return ret;} int main(){   vector<string>content, output;    string s;   while (getline(cin, s)) {      content.push_back(s);   }   output =hcat(content, frame(content));   for (vector<string>::size_type i = 0; i !=output.size(); ++i) {      cout <<output[i] << endl;   }   getch();   return 0;}

EX.5-1

 

EX.5-2

1)      vector版本

#include <algorithm>#include <vector>#include <iostream>#include <string>#include <fstream>#include <ctime>#include <conio.h> #include "Student_info.h"#include "grade.h" //driver program for grade partitioning examples using std::cin;using std::cout;using std::endl;using std::sort;using std::string;using std::vector;using std::max;using std::ifstream;using std::ofstream; vector<Student_info> extract_fails(vector<Student_info>&students) { vector<Student_info> fail;#ifdef _MSC_VER std::vector<Student_info>::iterator iter = students.begin();#else vector<Student_info>::iterator iter = students.begin();#endif   while (iter != students.end()) {    if (fgrade(*iter)) {     fail.push_back(*iter);      iter =students.erase(iter);    } else      ++iter;  }   return fail;} int main() { vector<Student_info> vs;  Student_info s;  string::size_typemaxlen = 0;   ifstream infile;   infile.open("100.txt"); //Elapsed:15   //infile.open("1000.txt"); //Elapsed:484   //infile.open("10000.txt"); //Elapsed:43297   if(!infile.is_open()){       cout<<"can not open the file..."<<std::endl;       getch();       exit(1);   }    while (read(infile, s)) {    maxlen =max(maxlen, s.name.size());    vs.push_back(s);  }   sort(vs.begin(),vs.end(), compare);   clock_t start =clock(); vector<Student_info> fails = extract_fails(vs);  clock_t elapsed =clock() - start;   cout << "Elapsed: " << elapsed <<endl;   //  for (int i = 0; i< fails.size(); ++i)  //    cout <<fails[i].name << " " << grade(fails[i]) << endl;   getch();  return 0;}

 

2) list版本

#include <algorithm>#include <list>#include <iostream>#include <string>#include <fstream>#include <ctime>#include <conio.h> #include "Student_info.h"#include "grade.h"using std::cin;using std::cout;using std::endl;using std::sort;using std::string;using std::list;using std::max;using std::ifstream;using std::ofstream; list<Student_info>extract_fails(list<Student_info>& students) { list<Student_info> fail;#ifdef _MSC_VER  std::list<Student_info>::iteratoriter = students.begin();#else vector<Student_info>::iterator iter = students.begin();#endif   while (iter != students.end()) {    if (fgrade(*iter)) {     fail.push_back(*iter);      iter =students.erase(iter);    } else      ++iter;  }   return fail;} int main() { list<Student_info> vs;  Student_info s;  string::size_typemaxlen = 0;   ifstream infile;   //infile.open("100.txt"); //Elapsed:16   //infile.open("1000.txt"); //Elapsed:31   infile.open("10000.txt"); //Elapsed:453  if(!infile.is_open()){       cout<<"can not open the file..."<<std::endl;       getch();       exit(1);   }    while (read(infile, s)) {    maxlen =max(maxlen, s.name.size());    vs.push_back(s);  }   vs.sort(compare);   clock_t start =clock(); list<Student_info> fails = extract_fails(vs);  clock_t elapsed =clock() - start;   cout << "Elapsed: " << elapsed <<endl;   //  for (int i = 0; i< fails.size(); ++i)  //    cout <<fails[i].name << " " << grade(fails[i]) << endl;   getch();  return 0;}

 

EX.5-3(5-4)

#include <algorithm>#include <list>#include <vector>#include <iostream>#include <string>#include <ctime>#include <conio.h>#include "Student_info.h"#include "grade.h" using std::cin;using std::cout;using std::endl;using std::sort;using std::string;using std::list;using std::vector;using std::max; typedef list<Student_info> Student_infos;//typedef vector<Student_info> Student_infos; Student_infos extract_fails(Student_infos& students) {  Student_infos fail;#ifdef _MSC_VER Student_infos::iterator iter = students.begin();#else Student_infos::iterator iter = students.begin();#endif   while (iter != students.end()) {    if (fgrade(*iter)) {     fail.push_back(*iter);      iter = students.erase(iter);    } else      ++iter;  }   return fail;} int main() {  Student_infos vs;  Student_info s;  string::size_typemaxlen = 0;  while (read(cin, s)) {    maxlen =max(maxlen, s.name.size());    vs.push_back(s);  }   //vs.sort(compare);   Student_infos fails =extract_fails(vs);   for (Student_infos::const_iterator i = fails.begin();i != fails.end(); ++i)    cout <<i->name << " " <<grade(*i) << endl;   getch();  return 0;}

EX.5-5

#include <iostream>#include <string>#include <vector>#include <conio.h> using namespace std; vector<string> center(constvector<string>& picture) {  vector<string>new_picture; vector<string>::size_type max_length = 0;   for (vector<string>::const_iterator i =picture.begin();       i !=picture.end(); ++i)    if (i->size() > max_length)      max_length =i->size();   for (vector<string>::const_iterator i =picture.begin();       i !=picture.end(); ++i) {   vector<string>::size_type padding = (max_length - i->size()) /2;    stringnew_line(padding, ' ');    new_line += *i;   new_picture.push_back(new_line);  }   return new_picture;} int main() {  vector<string>picture;   picture.push_back("*");  picture.push_back("***");  picture.push_back("*****");   vector<string>new_picture = center(picture);   for (vector<string>::const_iterator i =new_picture.begin();       i !=new_picture.end(); ++i)    cout << *i<< endl;   getch();  return 0;}
 

EX.5-6

#include <algorithm>#include <vector>#include <iostream>#include <fstream>#include <string>#include <ctime>#include <conio.h> #include "Student_info.h"#include "grade.h" //driver program for grade partitioning examples using std::cin;using std::cout;using std::endl;using std::sort;using std::string;using std::vector;using std::max;using std::ifstream;using std::ofstream; vector<Student_info>extract_fails(vector<Student_info>& students) { vector<Student_info> fail;#ifdef _MSC_VER std::vector<Student_info>::size_type i = 0;#else vector<Student_info>::size_type i = 0;#endif   while (i != students.size()) {    if (fgrade(students[i])) {     fail.push_back(students[i]);     students.insert(students.begin(), students[i]);      ++i;    }    ++i;  }    students.resize(students.size() - fail.size());   return fail;} int main() { vector<Student_info> vs;  Student_info s;  string::size_typemaxlen = 0;    ifstream infile;   //infile.open("100.txt"); //Elapsed:16   infile.open("1000.txt"); //Elapsed:1125   //infile.open("10000.txt"); //Elapsed:108297  if(!infile.is_open()){       cout<<"can not open the file..."<<std::endl;       getch();       exit(1);   }     while (read(infile, s)) {    maxlen =max(maxlen, s.name.size());    vs.push_back(s);  }   //  sort(vs.begin(),vs.end(), compare);   clock_t start =clock(); vector<Student_info> fails = extract_fails(vs);  clock_t elapsed =clock() - start;   cout << "Elapsed: " << elapsed <<endl;  getch();  return 0;}

EX.5-7

#include <iostream>#include <algorithm>#include <string>#include <vector>#include <conio.h> using std::cin;using std::cout;using std::endl;using std::vector;using std::string;using std::max; string::size_type width(constvector<string>& v){   string::size_typemaxlen = 0;   for (vector<string>::size_type i = 0; i !=v.size(); ++i)      maxlen =max(maxlen, v[i].size());   return maxlen;} vector<string> frame(constvector<string>& v){   vector<string>ret;   string::size_typemaxlen = width(v);   string border(maxlen+ 4, '*');    ret.push_back(border);    for (vector<string>::size_type i = 0; i !=v.size(); ++i) {      ret.push_back("* " + v[i] + string(maxlen -v[i].size(),' ') + "*");   }    ret.push_back(border);   return ret;} int main(){   vector<string>v, ret;   string s;   string::size_typemaxlen;    while (getline(cin, s)) {      v.push_back(s);   }    ret = frame(v);    for (vector<string>::const_iterator it =ret.begin(); it != ret.end(); ++it) {      cout << *it<< endl;   }    getch();   return 0;}

EX.5-9

#include <iostream>#include <string>#include <vector> using namespace std; bool has_uppercase(conststring& word) {  for (string::size_type i = 0; i != word.size(); ++i)    if (isupper(word[i]))      return true;   return false;} void print_string_vector(constvector<string>& v) {  for (vector<string>::const_iterator i =v.begin(); i != v.end(); ++i)    cout << *i<< endl;} int main() {  string s;  vector<string>no_uppercase;  vector<string>uppercase;   while (cin >> s)    if (has_uppercase(s))     uppercase.push_back(s);    else     no_uppercase.push_back(s);   cout << "\nNo uppercase letters:" << endl; print_string_vector(no_uppercase);   cout << "Has uppercase letters:" << endl; print_string_vector(uppercase);   return 0;}

EX.5-10

#include <algorithm>#include <iostream>#include <iterator>#include <string>#include <vector>#include <conio.h> using namespace std; bool is_palindrome(conststring& word) {  string reversed; reverse_copy(word.begin(), word.end(), back_inserter(reversed));  return (word == reversed);} int main() {  vector<string>palindromes;  stringlongest_palindrome;  string s;   while (cin >> s)    if (is_palindrome(s)) {     palindromes.push_back(s);       if (s.length() > longest_palindrome.length())   longest_palindrome =s;    }   cout << "\nPalindromes:" << endl;   for (vector<string>::const_iterator it =palindromes.begin();       it !=palindromes.end(); ++it)    cout << *it<< endl;  cout << endl;   cout << "Longest: " << longest_palindrome<< endl;   getch();  return 0;}

EX.5-11

#include <iostream>#include <string>#include <vector>#include <conio.h> using namespace std; const string ascenders = "bdfhklt";const string descenders = "gjpqy"; bool has_chars(conststring& word,const string& chars) {  for (string::size_type i = 0; i != word.length();i++)    for (string::size_type j = 0; j != chars.length();j++)      if (word[i] == chars[j])   return true;   return false;} int main() {  vector<string>has_asc_or_dsc;  stringlongest_word_without_asc_or_dsc;  string s;   while (cin >> s)    if (has_chars(s, ascenders) || has_chars(s,descenders))     has_asc_or_dsc.push_back(s);    else if (s.length()> longest_word_without_asc_or_dsc.length())      longest_word_without_asc_or_dsc= s;   cout << "\nHas ascenders or descenders: "<< endl;   for (vector<string>::const_iterator it =has_asc_or_dsc.begin();       it !=has_asc_or_dsc.end(); ++it)    cout << *it<< endl;   cout << "Longest word without ascenders or descenders:"       <<longest_word_without_asc_or_dsc << endl;   getch();  return 0;}


0 0
原创粉丝点击