C++Primer第五版 6.2.3节练习
2015-09-15 10:35
351 查看
练习6.16:下面的这个函数虽然合法,但是不算特别有用。指出它的局限性并设法改善。
答:这个函数就是判断被绑定的字符串是否为空的一个效果,空的话,值为真,不空的话,值为假。
练习6.17:编写一个函数,判断string对象中是否含有大写字母。编写另一个函数,把string对象全都改成小写形式。在两个函数中你使用的类型相同吗?为什么?
答;不同,一个是const string &,还有一个是string &;
练习6.18:为下面的函数编写函数声明,从给定的名字中推测函数具备的功能。
(a) 名为compare的函数,返回bool值,两个参数都是matrix类的引用。
(b) 名为change_val的函数,返回vector的迭代器,有两个参数:一个是int,另一个是vector的迭代器。
答:(a)bool compare(Matrix&,Matrix&) //比较两个Matrix类型是否相同
(b) vector::iterator change_val(int, vector) //写入一个int类型的数,赋值给迭代//器中的元素
练习6.19:假定有如下声明,判断哪个调用合法,哪个调用不合法。对于不合法的函数调用,说明原因。
练习6.20:引用形参什么时候应该是常量引用?如果形参应该是常量引用,而我们将其设为了普通引用,会发生什么情况。
答:当被绑定的对象我们不需要对它或者不能对它进行修改的时候,形参应该是常量引用。如果设为普通引用,则一旦改动这个形参,被绑定的对象也会一起改动,造成的后果无法预计。
练习6.17
bool is_empty(string &s) {return s.empty()}
答:这个函数就是判断被绑定的字符串是否为空的一个效果,空的话,值为真,不空的话,值为假。
练习6.17:编写一个函数,判断string对象中是否含有大写字母。编写另一个函数,把string对象全都改成小写形式。在两个函数中你使用的类型相同吗?为什么?
答;不同,一个是const string &,还有一个是string &;
练习6.18:为下面的函数编写函数声明,从给定的名字中推测函数具备的功能。
(a) 名为compare的函数,返回bool值,两个参数都是matrix类的引用。
(b) 名为change_val的函数,返回vector的迭代器,有两个参数:一个是int,另一个是vector的迭代器。
答:(a)bool compare(Matrix&,Matrix&) //比较两个Matrix类型是否相同
(b) vector::iterator change_val(int, vector) //写入一个int类型的数,赋值给迭代//器中的元素
练习6.19:假定有如下声明,判断哪个调用合法,哪个调用不合法。对于不合法的函数调用,说明原因。
double calc(double) ; int count(const string&, char); int sum(vector<int> :: iterator , vector<int> :: iterator, int); vector<int> vec(10); (a) calc(23.4, 55.1);//不合法,形参数量不匹配 (b) count(“abcda”, ‘a’); //合法 (c) calc(66);//合法 (d)sum(vec.begin(), vec.end(),3.8) //不合法,最后一个形参非int型
练习6.20:引用形参什么时候应该是常量引用?如果形参应该是常量引用,而我们将其设为了普通引用,会发生什么情况。
答:当被绑定的对象我们不需要对它或者不能对它进行修改的时候,形参应该是常量引用。如果设为普通引用,则一旦改动这个形参,被绑定的对象也会一起改动,造成的后果无法预计。
练习6.17
/* *练习6.17 *日期:2015/6/11 *问题描述:练习6.17:编写一个函数,判断string对象中是否含有大写字母。编写另一个函数,把string对象全都改成小写形式。在两个函数中你使用的类型相同吗?为什么? *功能;判断大写字母 , 改成小写字母 *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <string> #include <cctype> using namespace std; void is_upper(const string &word) //只是判断大写字母,未改动,因此类型是const string & { int cnt = 0; for (auto &j : word) { if (isupper(j)) { cout << "First upper letter is: " << j << endl; break; } else { ++cnt; //写一个计数器,用于判断是否不存在大写字母 continue; } } //cout << word.length() << endl; if (cnt == word.length()) cout << "No upper letter existing !!!" << endl; } //改写成小写字母,需要改动绑定对象,需要改写 { for (auto &j : word) j = tolower(j); } int main() { cout << "please ipnut a stirng! " << endl; string word; cin >> word; cout << "calls is_upper(): " << endl; is_upper(word); cout << "calls to_lower(): " << endl; to_lower(word); cout << "Afer to_lower(): " << word << endl; return 0; }
相关文章推荐
- OpenCV/source/sample/cpp的学习
- c/c++中delete/free 指针后,设置p=NULL的好处
- C++动态特性和C++对象模型——《高质量程序设计12章》
- C++ typedef typename
- C++中string类解析
- C++之static_cast, dynamic_cast, const_cast
- C++全局函数与类成员函数的区别和相互转化
- C++ int function() const; 怎么理解?
- 总结c/c++中各种基本数据类型转换方法
- C++和java多态的区别
- C++从零开始
- C语言中memset函数详解
- Eclipse+CDT+MinGW 配置 C/C++ 开发环境
- 浅析C++中的static(一些补充)
- 浅析C++中的static(一些补充)
- C语言中memset函数详解
- 2015C++暑期实训(上)
- C++调用java
- 考虑virtual函数以外的其他选择(Effective C++_35)
- 【LeetCode从零单刷】Add Digits