前两章习题较简单,这里就不作整理了,直接从第三章开始(持续更新):

Chapter 3. Strings, Vectors and Arrays

Exercise 3.1

part 1

#include <iostream>using std::cin;
using std::cout;
using std::endl;int main()
{int sum = 0, val = 1;while (val <= 10) {sum += val;++val;}cout << "Sum of 1 to 10 inclusive is " << sum << endl;return 0;
}

part 2

#include <iostream>using std::cin;
using std::cout;
using std::endl;
using std::cerr;struct Sales_data   {std::string bookNo;unsigned unit_sold = 0;double revenue = 0.0;
};int main()
{Sales_data data1, data2;double price = 0;cin >> data1.bookNo >> data1.unit_sold >> price;data1.revenue = data1.unit_sold * price;cin >> data2.bookNo >> data2.unit_sold >> price;data2.revenue = data2.unit_sold * price;if (data1.bookNo == data2.bookNo)   {unsigned totalCnt = data1.unit_sold + data2.unit_sold;double totalRevenue = data1.revenue + data2. revenue;cout << data1.bookNo << " " << totalCnt << " " << totalRevenue << " ";if (totalCnt != 0)cout << totalRevenue/totalCnt << endl;elsecout << "(no sale)" << endl;return 0;}else{cerr << "Data must refer to the same ISBN" << endl;return -1;}
}

Exercise 3.2

part 1

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string line;while (getline(cin, line))  {cout << line << endl;}return 0;
}

part 2

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string word;while (cin >> word)cout << word << endl;return 0;
}

Exercise 3.3

string类输入运算符(>>):忽视一切空格,从第一个非空格字符开始,到第一个空格结束;

getline():包含换行符前的所有空格;

Exercise 3.4

part 1

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string st1, st2;cin >> st1 >> st2;if (st1 == st2)cout << "The two strings are equal" << endl;else if (st1 > st2)cout << "The maximum string is " << st1 << endl;else cout << "The maximum string is " << st2 << endl;   return 0;
}

part 2

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string st1, st2;cin >> st1 >> st2;if (st1.size() == st2.size())cout << "The two strings have the same length " << endl;else if (st1.size() > st2.size())cout << "The longest string is " << st1 << endl;else cout << "The longest string is " << st2 << endl;   return 0;
}

Exercise 3.5

part 1

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string total_str, str;while (cin >> str)total_str += str;cout << "The concatenated string is " << total_str << endl;return 0;
}

part 2

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string total_str, str;while (cin >> str)if (total_str.empty())total_str += str;elsetotal_str += " " +str;cout << "The concatenated string is " << total_str << endl;return 0;
}

Exercise 3.6

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string str("I wanna go home!");for (auto &c : str)  {c = 'X';}cout << str << endl;return 0;
}

Exercise 3.7

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string str("I wanna go home!");for (char c : str)  {c = 'X';}   cout << str << endl;return 0;
}
//输出仍为I wanna go home!

本质上是把string中的每一个字符拷贝给循环控制变量c,此时对c更改只是改变了c字符,原string并没有任何变化,想要通过c改变string的值,就必须把c定义为对字符的引用。

Exercise 3.8

part 1

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string str("I wanna go home!");decltype(str.size()) n = 0; //这里注意必须初始化while ( n < str.size()) {str[n] = 'X';++n;}cout << str << endl;cout << n << endl;return 0;
}

part 2

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{string str("I wanna go home!");for ( decltype(str.size()) index = 0; index < str.size(); ++index)  {str[index] = 'X';}cout << str << endl;return 0;
}

使用范围for语句更简洁,逻辑也更清晰。

Exercise 3.9

不合法,不能用下标访问空字符串。

Exercise 3.10

#include <iostream>
#include <string>using std::string;
using std::cin;
using std::cout;
using std::endl;int main()
{cout << "Please input a string with punctuation: " << endl;string str, result;cin >> str;if (!str.empty())   {for (auto &c : str)  {if ( !ispunct(c))result += c;}cout << result << endl;return 0;}cout << "Your string is fucking empty!" << endl;return -1;
}

注:这里使用ispunct()但不Include <cctype>是因为iostream中间接包含了cctype。

Exercise 3.11

c为常量字符串的引用(底层const),只读取数据——合法,通过其修改数据——不合法。

Exercise 3.12

(a)正确,元素为向量,元素的元素为int;

(b)错误,拷贝初始化类型必须统一;

(c)正确,向量拥有10个空字符串元素;

Exercise 3.13

(a)无元素;

(b)10个元素,值均为0;

(c)10个元素,值均为42;

(d)一个元素,值为10;

(e)两个元素,值分别为10、42;

(f)10个元素,均为空字符串;

(g)10个元素,均为"hi";

Exercise 3.14

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec;int i;while (cin >> i) {ivec.push_back(i);return 0;}
}

Exercise 3.15

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<string> svec;string str;while (cin >> str) {svec.push_back(str);return 0;}
}

Exercise 3.16:

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{//v1vector<int> v1;cout << "The size is: "<< v1.size() << endl;cout <<  "The value is: ";for (auto i : v1)cout << i << " ";     cout << endl;//v2vector<int> v2(10);cout << "The size is: "<< v2.size() << endl;cout <<  "The value is: ";for (auto i : v2)cout << i << " ";     cout << endl;//后续同理
}

Exercise 3.17

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<string> text;string word;while (cin >> word) {text.push_back(word);}cout << "The original text is: " << endl;for (auto i : text) {cout << i << endl;}cout << "The changed text is: " << endl;for (auto str : text) {for (auto &c : str)  {c = toupper(c);}cout << str << endl;}return 0;
}

Exercise 3.18

不合法,不能使用无效下标访问不存在的元素。修改如下:

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec;ivec.push_back(42);cout << ivec[0] << endl;return 0;
}

Exercise 3.19

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec1(10, 42);vector<int> ivec2{42, 42, 42, 42, 42, 42, 42, 42, 42, 42};vector<int> ivec3;for (auto i = 0; i != 10; ++i)ivec3.push_back(42);vector<string> svec1{10, "42"};vector<string> svec2(10, "42");return 0;
}

ivec1的定义方式简洁且高效。

Exercise 3.20

part 1:

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec;int i = 0, sum = 0;while (cin >> i)ivec.push_back(i);if (ivec.empty())   {    //因为后续用到下标,这里必须验证是否为空!!cout << "Please input at least one integer"<< endl;return -1;}cout << "The sum is: " << endl;for (decltype(ivec.size()) index = 0; index < ivec.size() - 1; ++index)    {sum = ivec[index]+ ivec[index + 1];cout << sum << " ";}cout << endl;return 0;
}

part 2:

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{vector<int> ivec;int i = 0, sum = 0;while (cin >> i)ivec.push_back(i);if (ivec.empty())   {cout << "Please input at least one integer"<< endl;return -1;}cout << "The sum is: " << endl;for (decltype(ivec.size()) index = 0; index <= ivec.size()/2; ++index)    {if (index < ivec.size() - 1 - index)    {sum = ivec[index]+ ivec[ivec.size() - 1 - index];cout << sum << " ";}else if (index == ivec.size() - 1 - index)   {  //这里一定注意为双等号!!cout << ivec[index];}}cout << endl;return 0;
}

Exercise 3.21

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{//以v2为例,其他同理vector<int> v2(10);if (v2.empty()) {cout << "This is a empty vector " << endl;return -1;}cout << "The size of the vector is: " << v2.size() << endl;cout << "The values of the elements are: ";for (auto it = v2.cbegin(); it != v2.cend(); ++it)  {cout << *it << " ";}cout << endl;return 0;
}

Exercise 3.22

#include <iostream>
#include <string>
#include <vector>using std::string;
using std::cin;
using std::cout;
using std::endl;
using std::vector;int main()
{cout << "Please enter a text: " << endl;vector<string> svec;string str;while (getline(cin, str))svec.push_back(str);auto it = svec.begin();for (auto &c : *it)c = toupper(c);for (it;it != svec.cend(); ++it)    //注意这里it可不重新定义,但不能省略!!cout << *it << endl;return 0;
}

Exercise 3.23

#include <iostream>
#include <vector>
#include <string>using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;int main()
{vector<int> ivec(10);int i;cout << "Please enter ten integers: " << endl;for (auto it = ivec.begin(); it != ivec.cend(); ++it)   {cin >> *it;*it *= 2;}for (auto i : ivec)cout << i << " ";cout << endl;return 0;
}

Exercise 3.24

part 1

#include <iostream>
#include <vector>
#include <string>using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;int main()
{vector<int> ivec;int i;while (cin >> i)ivec.push_back(i);cout << "The sum is: " << endl;for (auto it = ivec.cbegin(); it != ivec.cend() - 1; ++it)cout << *it + *(it + 1) << " ";cout << endl;return 0;
}

part 2

法I:

#include <iostream>
#include <vector>
#include <string>using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;int main()
{vector<int> ivec;int i, sum;while (cin >> i)ivec.push_back(i);if (ivec.empty())cout << "Your vector is empty!" << endl;cout << "The sum is: " << endl;for (auto it = ivec.cbegin(); it != ivec.cbegin() + ivec.size()/2 +1; ++it) {if (it == ivec.cbegin() + (ivec.cend() - 1 - it))    {cout << *it;}else if (it < ivec.cbegin() + (ivec.cend() - 1 - it))   {sum = *it + *(ivec.cbegin() + (ivec.cend() - 1 - it));cout << sum << " ";}}cout << endl;return 0;
}

法II:

#include <iostream>
#include <vector>
#include <string>using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;int main()
{vector<int> ivec;int i, sum;while (cin >> i)ivec.push_back(i);if (ivec.empty())cout << "Your vector is empty!" << endl;cout << "The sum is: " << endl;for (auto beg = ivec.cbegin(), end = ivec.cend()  - 1; beg <= end; ++beg, --end)    {   //注意方法!!if (beg == end)cout << *beg;elsecout << *beg + *end << " ";}cout << endl;return 0;
}

Exercise 3.25

#include <iostream>
#include <vector>
#include <string>using std::vector;
using std::string;
using std::cout;
using std::cin;
using std::endl;int main()
{vector<unsigned> scores(11, 0);unsigned grade;auto it = scores.begin(); while (cin >> grade)    {if (grade <= 100)   {++*(scores.begin() + grade/10);}}for (auto i : scores)cout << i << " ";cout << endl;return 0;
}

Exercise 3.26

两个迭代器间只定义了相见,未定义相加;

所以可通过利用iterator - iterator将iterator +iterator转化为iterator + n。

Exercise 3.27

C++primer(第五版)习题答案相关推荐

  1. C++Primer第五版——习题答案+详解(完整版)

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  2. C++Primer第五版 习题答案 目录

    C++Primer第五版 习题答案 本文当作我学习C++的一个记录,这里的习题答案并不是标准答案,仅仅是我的理解,如有错误,请大家指出,谢谢! 参考的文章会在文末列出. 使用的系统为:ubuntu 1 ...

  3. C++Primer第五版——习题答案详解

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  4. C++ primer 第五版习题答案, Stanley B. Lippman( 斯坦利 李普曼)(持续更新中)

    最新重新看c++ primer 5 第五版本,看到网上很多人在找答案,而这本书是2013年9月份的样子出来的,网上肯定是没有标准答案的,而很多人冒天下之大不韪用c plus plus的答案来来骗取分数 ...

  5. C++Primer第五版——习题答案详解(九)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第10章 泛型算法 练习10.1 #include<iostream> #i ...

  6. C++Primer第五版——习题答案详解(六)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第7章 类 练习7.1 class Sales_data { public:std::s ...

  7. C++Primer第五版 习题答案 第十二章 动态内存

    12.1 b1有四个元素: b2被销毁: 12.2 strBlob.h #ifndef STRBLOB_H_ #define STRBLOB_H_#include<string> #inc ...

  8. C++ Primer第五版习题集答案

    学习了C++ Primer一段时间,老是看别人的答案,觉得好像啥也没学到.so 决定从现在开始写. 已经看到101页了,就从101页开始把答案贴在这里吧. 参照博客https://blog.csdn. ...

  9. c语言程序设计第五版李丽娟_c语言程序设计第五版习题答案

    习题解析与答案 第 1 章 C 语言概述 一. 简答题 1 .概述 C 语言的主要特点. [解答] ( 1 )语言简洁.紧凑,使用方便.灵活. ( 2 )数据类型丰富,表达能力强. ( 3 )运算符多 ...

  10. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

最新文章

  1. 排名第一的安全软件,为啥会变成流氓软件?
  2. AQS分析(AbstractQueuedSynchronizer)(三)
  3. Oracle的一些经典SQL面试题
  4. 7.4.8 数据压缩
  5. neo4j 显示名字_Neo4j:绘制“我的名字是……我在工作”图
  6. 结构化数据存储,如何设计才能满足需求?
  7. java计算器算法描述_基于Java的计算器算法(源代码)
  8. “编程太差,那你别搞开发了!”基础差的程序员,你不知道有多难!!
  9. FTP服务器搭建及操作(一)
  10. Matlab实现圆孔夫琅和费衍射
  11. PHP+Selenium爬虫 物理跳过反爬虫机制 PHP爬虫最佳实践方案分享
  12. 用Android KeyStore对数据进行加解密
  13. excel超链接怎么设置_14用Python 读写 Excel 文件
  14. 病例演讲比赛PPT模板
  15. weblogic上服务器上日志查看及ohs服务器重启
  16. c语言转fpga原理,要想玩转FPGA,就必须理解FPGA内部的工作原理-可编程逻辑-与非网...
  17. 2018年区块链红黑榜-千氪
  18. 动态规划——什么是动态规划?
  19. 某考试系统逻辑漏洞打包#可改题改分数#查看大量信息
  20. RedHat6 挂载FC存储创建LVM

热门文章

  1. 判断闰年:输出1990-2010年之间的闰年
  2. 是什么让李彦宏登上了时代周刊的封面?
  3. 设计新奇的充电器,能搭积木还支持多口快充,IDMIX积木桌面充电器上手
  4. 【计算机动画】人体动画概览
  5. 查寝 | c++ | 不用双向链表(下篇)
  6. 15个强大的在线图片编辑器(Top 15 Online Image Editors - Who needs Photoshop? )
  7. 华为Matebook安装Manjaro Linux的不完全攻略
  8. EasyCVR在数字化手术室/医疗直播/手术示教/VR直播解决方案中的应用
  9. 江苏泗洪计算机学校怎么样,泗洪一大波学校先后被教育部点名!有没有你母校?...
  10. 结构体大小及其位域问题(from:byr)