C++Primer第五版 第六章习题答案(11~20)
来源:互联网 发布:4g网络优化工作 编辑:程序博客网 时间:2024/05/21 09:30
11:
知识点1:通过使用引用形参,可以改变实参的值。
知识点2:避免使用引用的过程中拷贝,因为如果对象特别巨大,拷贝的过程会非常缓慢,造成程序低效。
知识点3:当函数需要多个返回值时,可以使用引用形参返回多个值。
对于让函数返回多个值的具体操作:1、定义一个新的数据类型,包含多个参数。2、给函数传入额外的引用实参,令其保存额外的参数,隐式的返回。
#include <iostream>#include <string>#include <vector>using namespace std;int My_reset(string &My_string, char c, int &val)//函数的声明及定义,接受三个参数,以传址的方式传入两个需要改变的参数(引用),无需改变的目标字符传值即可。{int First_position = My_string.size();for (int i = 0;i < My_string.size();i++){if (My_string[i] == c){if (First_position == My_string.size()){First_position = i;}val++;//修改并隐式的返回其出现次数}}return First_position;//返回目标字符出现的首位置}void main(){cout<<"请输入目标字符串:";string string_1;cin>>string_1;cout<<"请输入目标字符以确定字符出现首位置以及次数:";char My_char;cin>>My_char;int val = 0;//此处需要将次数初始化后使用int number = My_reset(string_1,My_char,val);if (val == string_1.size()){cout<<"目标字符串中无"<<My_char<<"字符出现"<<endl;}cout<<"字母i第一次出现的位置为:"<<number+1<<endl;//加一因为数组从零开始,但是我们自然计数从第一个位置开始。cout<<"字母i出现的次数为:"<<val<<endl;}
12:第十题中我使用的就是传址的方式交换两数字,虽然两者作用相同,但是C++中建议使用传址的方式以区别C语言。
13:前者以传值方式传入参数,不能修改实参。后者以传址的方式传入参数,可以修改实参。
14:形参是否是引用类型应该根据是否需要修改对应实参的值来看,如果需要修改,则应是引用类型。
15:原因:因为s字符串是不能被函数所修改的,所以是常量引用。
c可能是一个临时变量,所以不需要使用引用类型,也无需函数加以修改其本身。
如果令occurs为常量引用,则输出occurs为0(不能加以修改),而s可能会在程序中被修改。
16:知识点1:字符串s在函数中无需修改,所以最好是加上const 表示常量引用。
17:判断字符串中是否有大写字母
#include <iostream>#include <string>#include <vector>using namespace std;bool My_reset(string const &My_string)//函数的声明及定义,My_string无需在函数中修改,所以使用常量引用。{for (int i = 0;i < My_string.size();i++){if (My_string[i] >= 'A' && My_string[i] <= 'Z')//利用ASCII码进行判断{return true;}}return false;//返回目标字符出现的首位置}void main(){cout<<"请输入目标字符串:";string string_1;cin>>string_1;if (My_reset(string_1)){cout<<"目标字符串中含有大写字母"<<endl;}else{cout<<"目标字符串中不含有大写字母"<<endl;}}
将字符串中元素改为小写形式
#include <iostream>#include <string>#include <vector>using namespace std;string My_reset(string &My_string)//函数的声明及定义,My_string需在函数中修改,所以不能使用常量引用。{for (int i = 0;i < My_string.size();i++){if (My_string[i] >= 'A' && My_string[i] <= 'Z'){My_string[i] = My_string[i] + 32;//大写字母小写字母的ASCII码:a-z:97-122 A-Z:65-90 0-9:48-57}}return My_string;//返回修改后的字符串}void main(){cout<<"请输入目标字符串:";string string_1;cin>>string_1;cout<<"修改前的字符串为"<<string_1<<endl;cout<<"修改后的字符串为"<<My_reset(string_1)<<endl;}
需要修改传入的参数,就不能用常量引用,记住就好了。
18:
(a):
bool compare(matrix &m1, matrix &m2){ /.../ }(b):
vector<int>::iterator change_val(int, vector<int>::iterator) { /.../ }
19:
(a):函数只有一个参数,传入两个不合法
(b):合法
(c):合法
(d):合法
20:无需在函数中改变的参数应该为常量引用,普通情况下,可能不会出错,但是有些不小心改变了不应该改变的参数就会引发不必要的错误。
1 0
- C++Primer第五版 第六章习题答案(11~20)
- C++Primer 中文版 第五版 第六章课后习题答案
- C++Primer第五版 第六章习题答案(1~10)
- C++Primer第五版 第六章习题答案(31~40)
- C++Primer第五版 第六章习题答案(21~30)
- C++Primer第五版 第六章习题答案(41~50)
- C++Primer第五版 第六章习题答案(51~56)
- C++Primer第五版 第五章习题答案(11~20)
- C++Primer(第五版) 习题答案
- C++Primer第五版 第二章习题答案(11~20)
- C++Primer第五版 第三章习题答案(11~20)
- C++Primer第五版 第四章习题答案(11~20)
- C++Primer第五版 第七章习题答案(11~20)
- C++Primer第五版 第九章习题答案(11~20)
- C++Primer第五版 第十章习题答案(11~20)
- C++Primer第五版 第十一章习题答案(11~20)
- C++Primer第五版 第十二章习题答案(11~20)
- C++Primer第五版 第十三章习题答案(11~20)
- 在Linux下实现简易进度条
- JVM系列:JVM参数设置、分析
- 新的开始
- C++Primer第五版 第六章习题答案(1~10)
- Box2D v2.3.0 用户指南(第十二章)
- C++Primer第五版 第六章习题答案(11~20)
- jupyter notebook 误删恢复
- Box2D v2.3.0 用户指南(第十三章)
- C++Primer第五版 第六章习题答案(31~40)
- OpenCV2.2在vs2010下一种一劳永逸的方法后续补充
- spring编程式事务管理的环境搭建及实例
- http://blog.csdn.net/harvic880925/article/details/38487149
- 爬取免费IP代理,以列表形式返回
- VGA接口电路设计