c++ primer plus(第六版) 第四章重点内容总结 以及手码练习题答案

本文详细总结了C++ Primer Plus第六版第四章的重点内容,涵盖了数组的声明、初始化、大小计算以及数组与字符串的区别。介绍了C风格字符串的使用,包括字符串常量、strcpy、strcat函数。讲解了cin的使用,特别是如何处理空白字符和使用getline()。此外,文章还讨论了string类的特性,如自动调整大小和拼接操作。结构体的创建、初始化和成员访问也在文中提及,包括结构体数组的声明和初始化。最后,简要介绍了枚举、共用体、指针、动态内存分配(new和delete)以及模板类vector和array的基本用法。
摘要由CSDN通过智能技术生成

1.数组

可存储多个同类型的的值。声明时候 类型 数组名【元素个数】。其中元素个数必须是整型常数或者const值,常量表达式。c++数组都是从0开始编号。最后一个元素的索引比数组长度小一。貌似编译器不会检查使用的下表是否有效。sizeof用于数组名时得到整个数组中的字节数,用于数组元素时,得到元素的长度。(单位都是字节)。

关于数组初始化,只有在定义数组时才能使用花括号初始化(列表初始化)且不能将一个数组赋给另一个数组。使用花括号只能在一步定义时使用,而不可先声明后赋值。且花括号可以省略等号,禁止元素的缩窄转换。(浮点数到整型)但使用索引下标赋值是可以分开进行的。若只对数组一部分元素显示初始化,那么其余元素被默认为0.。若【】内为空,编译器会计算数组个数。但是不推荐这种做法。指明:sizeof运算符指出整个数组的长度(字节bytes),strlen只计算可见的字符而不把空字符包含在内。在数组中只能处理到空字符为止的字符串。strlen(charr)接受一个c风格字符串

2.字符串

c++处理字符串有两种方式,第一个是c-风格字符串,第二个基于string类字符串。

其中c风格字符串以空字符结尾,‘\0’,因此存储字符串的数组长度要+1.如char cat【8】 = {'f','a','t','e','s','s','a','\0'};。还有一种方法简便可行,使用字符串常量初始化/字符串字面值进行初始化(使用双引号)。 如 char bird[11]="Mr.  Cheeps".用引号括起来的字符串隐式地包括结尾地空字符因此不必显示地包含。一定注意单引号双引号的区别,如“s”是包含‘\0’地字符串,赋给变量其实是赋值地内存地址,赋给数组才是字符串。而‘s’才是字符,可以赋给变量。C风格字符串可以使用strcpy(charr1,charr2)(把charr2赋值给charr1);strcat(charr1,charr2)(把charr2添加到charr1末尾)

3.cin的用法

cin使用空白(空格,制表符,换行符)来确定输入字符串的结束位置。意味着如果你输入两个单词,cin只读取第一个将其放在数组中在结尾添加'\0'空字符。而另一个留在输入队列中。因此istream提供面向行读入的getline() ,如cin.getline(name,20)只能读取19个字符cin.getline(name1,20).getline(name2,20)可以连续读入两行。get(),若get(name,20)两次那么第一次后取到正常字符串保存,然而换行符留在输入队列,下一次则只能读取换行符以为到达行尾而读不到任何信息。两句中间可加入cin.get()来读取下一个字符,或者cin.get(name,20).get()。两者均是读取一行输入直到到达换行符,但getline()丢弃换行符,将其替代为空字符存入数组,get则将换行符保留在输入队列中。

当使用cin和cin.getline/cin.get混用读入字符串和数字的时候,应该(cin>>  ).get() 后再使用getline()/cin.get(),因为cin后存在一个换行符,用cin.get读取后,之后的getline才能正常运作。否则换行符留在输入队列中会使得之后的getline读取不到任何内容。

4.string类

须在头文件中包含#include<string>,且string类位于命名空间std中,因此using namespace std;/std::string是需要的。string对象可以将变量声明为一个简单变量而不是数组,类设计使得程序能够自动处理string的大小。且string类可以接受列表初始化。与数组不同,可以将一个string对象赋值给另一个string对象。string对象可以使用+将两个对象合并/+=拼接字符串将字符串加到string对象的末尾(也可以与c风格字符串(“hahaha”)混+)。str.size()返回string类对象的字符数。getline(cin,str)从输入流中读取一行。

5。结构体

创建结构有两步,定义结构描述,然后按照描述创建结构变量。结构描述如

struct inflatable

{char name[20];float volume;double price;}; 然后创建结构变量 如,inflatable hat;(c++允许省略关键字struct)。调用类成员如:hat.name;是一个char 型 字符串。初始化举例:inflatable guest={"selina",1.99,5.97865};c++不提倡使用外部变量,但提倡使用外部结构声明。其中“=”是可选的。若大括号内未包含任何东西,那么各个成员都被设置成为0.且不允许缩窄转换。注意结构也是支持使用string类成员的,如inflatable haha{string std::name;float volume;double price;};另外可以使用成员赋值方式将一个结构赋值给另一个同一类型的结构,这样结构的每个成员都被设置成为另一个结构中相应成员的值。即使成员是数组。

另可以同时完成定义结构和创建结构变量的工作,如:

struct perks{int key_number;char car[12];}mr_sminth,ms_jones;是紧接着进行初始化。甚至可以初始化以这种方式创建的变量:

struct perks{int key_number;char car[12];}mr_glitz={7,"packard"};

6.结构数组

即元素为结构的数组。如inflatable gifts[100];意为一个包含100个inflatable结构的数组。gifts本身是一个数组,而其元素为结构,即可以使用gift[0].name来调用结构成员。初始化:inflatable gift[2]={ {"haha",2.34,345.8},{"hehe",23.4,5.87}};

7.共用体

句法与结构体相似,含义不同,且只能同时存储其中的一种类型。union one4all{int int_val;long long_val;double double_v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值