《C++ Primer》第五版课后习题解答_第三章(2)(06-20)
来源:互联网 发布:平板推荐 知乎 编辑:程序博客网 时间:2024/06/08 06:35
系统环境: windows 10 1703
编译环境:Visual studio 2017
3.6
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;int main(){ string s; cout << "Enter one string: " << endl; getline(cin, s); for (auto &c : s) { c = 'x'; } cout << s << endl; return 0;}最开始程序出现了问题,报错在15行。查询后发现,原因在于,当时的赋值语句右侧写成了「“x”」,此时 x 是字符串,将字符串赋给字符变量 c,就出现了错误。把双引号改为单引号后,正确编译。
3.7
将循环控制变量改为 char,编译运行结果保持不变。验证后发现确实不变。
3.8
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;// 传统 for 循环int main(){ string s; cout << "Enter one string: " << endl; getline(cin, s); for (string::size_type i = 0; i < s.size(); ++i) { s[i] = 'x'; } cout << s << endl; return 0;}
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;// while 循环int main(){ string s; cout << "Enter one string: " << endl; getline(cin, s); string::size_type i = 0; while ( i < s.size()) { s[i] = 'x'; ++i; } cout << s << endl; return 0;}范围 for 语句最简便,可以直接循环 string 内的每一个字符,而不需要为下标单独声明一个变量。
3.9
合法,输出字符串 s 的第一个字符。
(英文原版文字为 Is it valid? If not, why not? 没有查到在 C++ 中 valid 和 legal 的区别。)
3.10
#include <iostream>#include <string>using std::cout;using std::endl;using std::cin;using std::string;int main(){ string s; getline(cin, s); string result; for (string::size_type i = 0; i< s.size(); ++i) { if (!ispunct(s[i])) { result += s[i]; } } cout << result << endl; return 0;}
3.11
c 的类型是 const char&
合法与否取决于循环体内的语句,如果不改变 c 的值则合法,否则不合法。
3.12
(a) 正确,ivec 的元素是 vector 对象;
(b) 错误,对象类型不同;
(c) 正确,svec 内有十个元素,均为 null;
3.13
(a) 空 (b) 10个 (c) 10个 (d) 1个 (e) 2个 (f) 10个 (g) 10个
3.14
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){ int i; vector<int> ivec; while (cin >> i) { ivec.push_back(i); } for (int i = 0; i <= (ivec.size() - 1); ++i) { cout << ivec[i] << endl; } return 0;}
3.15
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){ string s; vector<string> svec; while (cin >> s) { svec.push_back(s); } for (int i = 0; i <= (svec.size() - 1); ++i) { cout << svec[i] << endl; } return 0;}
3.16
3.13 回答正确
3.17
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){ vector<string> svec; vector<string> result; string s; while (cin >> s) { svec.push_back(s); } for (auto &a : svec) { for (auto &b : a) { b = toupper(b); } } for (auto &c : svec) { cout << c << endl; } return 0;}
3.18
不合法,ivec 中不存在任何元素,所以无法用下标访问。
可将 ivec 定义为:vector<int> ivec(10);
3.19
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;int main(){ vector<int> ivec1(10, 42); //这个方法更好。对于元素个数已知,并且所有元素相同的 vector,直接赋值的方法更快捷 vector<int> ivec2{ 42, 42, 42, 42, 42, 42, 42 ,42 ,42 ,42 }; vector<int> ivec3; for (int i = 0; i <= 9; ++i) { ivec3.push_back(42); } return 0;}
3.20
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;// 相邻整数的和int main(){ vector<int> ivec; int i; int sum; while (cin >> i) { ivec.push_back(i);//构建 vector } for (auto &a : ivec) { cout << a << endl; } for (vector<int>::size_type j = 0; j <= (ivec.size() - 2); ++j) // 从第一个数开始,求其和后一个数之和。所以j 取倒数第二个数的下标 { cout << ivec[j] + ivec[j + 1] << endl; } return 0;}
#include <iostream>#include <string>#include <vector>using std::cout;using std::endl;using std::cin;using std::string;using std::vector;// 两侧至中的和int main(){ vector<int> ivec; int i; int sum; while (cin >> i) { ivec.push_back(i); } for (auto &a : ivec) { cout << a << endl; } for (vector<int>::size_type j = 0; j <= (ivec.size() - 1); ++j) // 从最左侧的数开始取,和相应的数相加 { if (j < (ivec.size() - 1 - j)) //如果出现大于的情况,则表示取值越过了中线 { cout << ivec[j] + ivec[(ivec.size() - 1 - j)] << endl; } else if (j == ((ivec.size() - 1 - j))) //如果相等,则表示取到了中间数 { cout << "This is the middle number: " << ivec[j] << endl; } } return 0;}
阅读全文
0 0
- 《C++ Primer》第五版课后习题解答_第三章(2)(06-20)
- 《C++ Primer》第五版课后习题解答_第三章(1)(01-05)
- 《C++ Primer》第五版课后习题解答_第三章(3)(21-29)
- 《C++ Primer》第五版课后习题解答_第三章(4)(30-36)
- 《C++ Primer》第五版课后习题解答_第三章(5)(37-45)
- 《C++ Primer》第五版课后习题解答_第二章(2)(09-20)
- 《C++ Primer》第五版课后习题解答_第五章(4)(20-25)
- 《C++ Primer》第五版课后习题解答_第五章(2)(09-14)
- 《C++ Primer》第五版课后习题解答_第四章(1)(01-20)
- 《C++ Primer》第五版课后习题解答_第四章(2)(21-33)
- 《C++ Primer》第五版课后习题解答_第六章(2)(08-15)
- 《C++ Primer》第五版课后习题解答_第五章(1)(01-08)
- 《C++ Primer》第五版课后习题解答_第五章(3)(15-19)
- 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
- 《C++ Primer》第五版课后习题解答_第二章(3)(21-29)
- 《C++ Primer》第五版课后习题解答_第二章(4)(30-38)
- 《C++ Primer》第五版课后习题解答_第二章(5)(39-42)
- 《C++ Primer》第五版课后习题解答_第四章(3)(34-38)
- windowsAPI断点
- 星星评分视图
- 关于java文档注释添加url链接
- java中设置session过期时间
- ZOJ 3195 LCA+RMQ+找规律
- 《C++ Primer》第五版课后习题解答_第三章(2)(06-20)
- 【HDU】1159 Common Subsequence(DP、最长公共子序列)
- Intellij IDEA配置AndroidSDK报错,No Java SDK of appropriate version found.
- 分享获得Linux系统RHCE认证日记
- json学习笔记
- 【操作系统PK】作为一个开发者,你选苹果还是机器人?
- Tomcat整合solr,solr部署在Tomcat中
- win10 本地 laravel 与redis 交互
- 【备忘】2017最新传智播客黑马java 32期基础就业班视频教程