您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 6.2.3节练习

2015-09-15 10:35 351 查看
练习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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: