练习6.16:下面的这个函数虽然合法,但是不算特别有用。指出它的局限性并设法改善。
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;
}