《C++ primer》5th读书笔记(chapter3)

来源:互联网 发布:淘宝日本代购店铺 推荐 编辑:程序博客网 时间:2024/05/14 10:17

chapter 3 字符串、向量和数组

      内置类型由C++直接定义,体现了大多数计算机硬件本身具备的能力。而标准库定义了一些更高级性质的类型,它们尚未直接实现到计算机硬件中。

3.1  命名空间的using声明

      库函数基本上都属于命名空间std。

      形式如下:

using namespace::name;

      注意:using 声明不应该出现在头文件中。

3.2 标准库类型string

     string表示可变长的字符序列。使用string必须包含string头文件,且声明使用命名空间的std。gfr

#include <iostream>using std::string;

  3.2.1 string的初始化

string s1;              // 定义一个空stringstring s2 = s1;         // s2是s1的副本,等同于s2(s1)string s3 = "hello";    // s3是“hello”字符串除了最后一个'\0'结束符的副本string s4(5,'c');      // 等同于 4="ccccc;

 注意:当用字符串字面值初始化string时,字符串字面值最后的那个默认结束符不会被送过去,string变量是没有结束符的。使用=的是拷贝初始化(copy initialization),没有等号的是(direct initialization)。

3.2.2 string对象上的操作

    在执行读取操作时,string对象会自动忽略开头的空白(空格,制表,换行符等)并从第一个真正的字符开始读起,直到遇到下一个空白为止。

读取未知数量的string对象

while(cin >> str)    cout << str <<endl;
    上面while语句的条件部分负责在读取时检查流的情况,如果流有效,即没有遇到文件结束符(window用户是ctrl+Z)或非法输入,就一直循环。每一次Enter都会将缓冲区的所有有效字符逐一输出,用换行间隔。但若想保留文字中的空白符就得用getline函数了。
     getline函数的参数:一个输入流,一个string对象。
     getline函数的功能:从第一个参数给定的输入流读入内容,直到换行符(包括),然后将其存储到第二个参数给定的对象中(不包括换行符)。
     getline函数也会返回流参数,所以也能作为条件使用。
while(getline(cin,line))    cout << line << endl;

以上语句在遇到文件结束符之前,将一直循环,每一次回车后都将cin流缓冲区的内容按原格式输出。读取一行中的行由用户输入的Enter决定,即从上一次回车之后到这次回车表示一行,而不是根据屏幕上显示的行(屏幕大小不同)。

string的empty和size操作

    empty函数功能:根据string对象是否为空返回一个对应的bool值。为空返回true,非空返回false。直接用点操作符.调用。
    size函数功能:返回string对象的长度。(string类型字符串没有字符串结束符'\0')点操作符调用。
    注意:size函数返回值是string::size_type类型,是一个无符号类型。可以用auto和decltype推断这种类型。g
  其实大多数标准库都定义了几种配套的类型,体现了标准库与机器无关的特性。size_type就是string的配套类型。

比较string对象

    逐一比较字符,对大小写敏感。比较原则:"Hello"<"hello"<"hello world"<"hi";即大写字符小于小写字符,前面字符小于后面字符。

string相加

s1 += s2;   // 将s2加到s1后面的值存入s1
    字符串也可以和字符字面值以及字符串字面值相加。因为标准库允许把字符串字面值和字符字面值转换成string类型,但是做这种混合运算时,必须确保+的两侧至少有一个是string类型。
s = s1 + 'a' + 'a' + "ab";    // 正确,初看好像第二个+两端都是字符字面值,但表达式是从左往右计算的,在第一个加号计算完后,s1+'a'就是string类型了s = 'a' + 'a' + s1 + "ab";    // 错误s = "ab" + "ab" + s1 + "ab";  // 错误
    切记:字符串字面值和string类型并不一样!!!g

3.2.3 处理string对象中的字符


cctype头文件中的函数cctype头文件中的函数fcctype头文件中的函数cctype头文件中的函数cctype头文件中的函数 

                        

   isalnum(c)             j jccty


           



0 0
原创粉丝点击