C++ Primer Plus 学习笔记(第 4 章 复合类型)

C++ Primer Plus 学习笔记

第 4 章 复合类型

数组

数组(array)是一种数据格式,能够存储多个同类型的值。
要创建数组,可使用声明语句。数组声明应指出以下三点:

  • 存储在每个元素的值的类型;
  • 数组名;
  • 数组中的元素数。

声明数组的通用格式如下:

typename arrayName[arraySize];

表达式arraySize指定元素数目,必须是整数或const值,也可以是常量表达式,即其中所有的值在编译时都是已知的,即不能是变量。
使用下标或索引访问元素,C++数组从0开始编号。编译器不会检查使用的下标是否有效。

数组的初始规则

只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组。
然而,可以使用下标分别给数组中的元素赋值。
初始化数组时,提供的值可以少于数组的元素数目。
如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0
如果初始化数组时方括号内为空,C++编译器将计算元素个数。此方法对将字条数组初始化为一个字符串来说比较安全。

C++11 数组初始化方法

C++11将使用大括号的初始化(列表初始化)作为一种通用的初始化格式,可用于所有类型。
数组以前就可以使用列表初始化,但C++11中的列表初始化新增了一些功能。
首先,初始化数组时,可以省略等号(=)。
其次,可不在大括号内包含任何东西,这将把所有元素都设置为零。
第三,列表初始化禁止缩窄转换。

字符串

字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种来自C语言,常被称作C-风格字符串(C-style string)。另一种是基于string类库的方法。
C-风格字符串具有一种特殊的性质:空字符(null character)结尾,空字符实写作\0,其ASCII码为0,用来标记字符串的结尾。
将字符数组初始化为字符串的方法——只需使用一个引号括起的字符串即可,这种字符串被称为字符串常量(string constant)或字符串字面值(string literal)。
用引号括起的字符串常量隐式地包括结尾的空字符,因此不用显示地包括它。
注意:字符串常量(使用双引号)不能与字符常量(使用单引号)互换。

拼接字符串常量

C++允许拼接字符串字面值,任何两个由空白(空格、制表符和换行符)分隔的字符串常量都将自动拼接成一个。
注意:拼接时不会在被连接的字符串之间添加空格,第一个字符串中的\0字符将被第二个字符串的第一个字符取代。

在数组中使用字符串

要将字符串存储到数组中,最常用的方法有两种——将数组初始化为字符串、将键盘或文件输入读入到数组中。

字符串输入

cin使用空白(空格、制表符和换行符)来确定字符串的结束位置。

每次读取一行字符串输入

iostream中的类(如cin)提供了一些面向行的类成员函数:getline()get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在序列中。

面向行的输入getline()
cin.getline(charArray, strSize);

getline()函数每次读取一行,最多读取strSize-1个字符,通过换行符确定行尾,但不保存换行符,存储时用空字符代替换行符。

面向行的输入get()

get()第一种工作方式与getline()类似,接受相同的参数,但不再丢弃换行符,而是将它保留在输入序列中。不带参数即可读取一个字符,包括换行符。

cin.get(charArray, strSize);
cin.get();

另一种使用get()的方式是将两个类成员函数拼接起来(合并),getline()也可以,其效果与两次调用相同。

cin.get(charArray, strSize).get();
cin.getline(charArray1, strSize).getline(charArray2, strSize);
空行和其他问题

get()读取空行后新塘镇设置失效位,接下来的输入被阻断,可使用cin.clear();恢复输入。
如果输入行包含的字符数比指定的多,则getline()get()将把余下的字符保留在输入队列中,而get()还会设置失效位,并关闭后面的输入。

混合输入字符串和数字

cin读取数字后,在getline()之前要丢弃换行符,可使用没有参数的get()

string 类简介

C++98标准通过添加string类扩展了C++库,可以使用string类型的对象来存储字符串。string类使用起来比数组简单,同时提供了将字符串作为一种数据类型的表示方法。
要使用string类,必须在程序中包含头文件stringstring类位于名称空间std中,因此必须提供一条using编译指令,或使用std::string来引用它。string类定义隐藏了字符串的数组性质,可像普通变量那样处理字符串。
在很多方面,使用string对象的方式与使用字符数组相同。

  • 可以使用C-风格字符串来初始化string对象。
  • 可以使用cin来将键盘输入存储到string对象中。
  • 可以使用cout来显示string对象。
  • 可以使用数组表示法来访问存储在string对象中的元素。

string对象与字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组。
类设计让程序能够自动处理string的大小。这使用与使用数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值