c++第十二天

《c++ primer, 5E》

第81页到第86页,笔记:

 处理string对象中的字符:

1、cctype

2、foreach(range for)

3、decltype(Declared Type)

4、auto

5、string::size_type(s.size函数的返回值类型)

6、使用range for改变字符串中的字符,必须把循环变量定义成引用类型

7、访问string对象的单个字符:下标(也叫索引,类型为string::size_type)和迭代器

    for(decltype(s.size()) index = 0;
        index != s.size() && ! isspace(s[index]); ++index)
            s[index] = toupper(s[index]);

8、逻辑与运算符(&&)对这个运算符来说最重要的一点是,c++语言规定只有当左侧运算对象为真时才会检查右侧运算对象的情况。

9、使用下标执行随机访问

    const string hexdigits = "0123456789ABCDEF";
    string result;
    string::size_type n;
    while(cin >> n)
        if(n < hexdigits.size())
            result += hexdigits[n];
    cout << "Your hex number is: " << result << endl;

遇到的问题:

1、不需要inlcude<cctype>就可以使用toupper(c)?

2、下面的程序可编译,无法运行

#include<string>
using std::string;
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include <typeinfo>
int main()
{
    const string s = "Keep out!";
    for(auto &c: s){
        cout << typeid(c).name() << endl;
    }
    return 0;
}

课后练习:

练习3.6

#include<string>
using std::string;
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
    string s("Hello World!!!");
    for(auto &c: s)
        c = 'X';
    cout << s << endl;
    return 0;
}

练习3.7

如果是char c那么不会改变原字符串,

如果是char &c效果应该和上一题一样。

(验证正确)

练习3.8

遍历序列中的所有元素range for要比while和传统for方便,而且可读性更好。

练习3.9

对于这种情况,编译器不会检查下标的合法性,能编译,但是输出结果无法预知。

练习3.10

#include<string>
using std::string;
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    string s;
    getline(cin , s);
    for(auto c: s)
        if(!ispunct(c))
            cout << c;
    cout << endl;
    return 0;
}

练习3.11

合法。应该是底层const

原文地址:https://www.cnblogs.com/xkxf/p/6376736.html