《C++ Primer Plus》学习笔记——第四章 复合类型(一)

内容:

  • 创建和使用数组、C-风格字符串、string类字符串
  • 使用方法getline()和get()读取字符串
  • 混合输入字符串和数字
  • 创建和使用 结构、共用体、枚举和指针
  • 使用new和delete管理动态内存
  • 创建动态数组和动态结构
  • 自动存储、静态存储和动态存储
  • vector和array类简介

复合类型是基于基本整型和浮点类型创建的。影响最为深远的复合类型是类,它是将学习的OOP的堡垒。

数组

数组是一种数据格式,能够存储多个同类型的值。

数组声明:

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

例:float loans[20];

可以单独访问数组元素。方法是使用下标或索引来对元素进行编号。注:不能超过下标。

一般坚持使用小型数组。可用for循环对数组进行赋值。

数组的初始化:

只有在定义数组时才能使用初始化。

C++11将使用大括号的初始化(列表初始化)作为一种通用初始化方式。

初始化数组时,可省略等号

例:double earning[]={};

       double earning[] {};

字符串

C++处理字符串的方式有两种:

一是C-风格字符串;二是基于string类库的方法;

C-风格字符串具有一种特殊的性质:以空字符结尾。

声明:

char dog[8]={'b','c','\0'};

char bridge[11]={"Mr.Cheep"};

字符串常量:(隐式的包含了结尾的空字符)

char bridge[11]="Mr.Cheep";

char bridge[]="Mr.Cheep";

应确保数组足够大,能够存储字符串中所有的字符(包括空字符)。

C++对字符串长度没有限制,所以处理字符串的函数根据空字符的位置来处理。

任何两个由空白分隔的字符串常量都将自动拼接成一个。

cout<<"I'd give my right arm to be" " a great violinist.\n";

要将字符串存储到数组中,最常用的方法有两种:

  1. 将数组初始化为字符串常量。
  2. 将键盘或文件输入读入到数组中。

strlen()只计算可见的字符,而不把空字符计算在内。

cin使用空白来确定字符串的结束位置。若输入的字符串中包含空格就十分麻烦。

面向行输入:getline();(下次读取跨过换行符)

读取整行,通过使用回车键输入换行符来确定结尾。

使用cin.getline(),该函数有两个参数,第一个用来存储输入行的数组的名称,第二个参数要读取的字符数(包含空字符)。

get();(无法跨过换行符)

使用方法同getline().

可以使用cin.get()(只有一个char型参数,或无参数)来跳过换行符。

也可以合并使用:cin.get(name,size).get();

当get()读取空行后将设置失效位,可用cin.clear();恢复输入。

string类

C++库中添加了string类,可以使用string类型的变量而不是字符数组来存储数组。

要使用string类,必须程序里包含头文件string。string类位于名称空间std中。

在很多方面,string类的使用方式与使用字符数组相同

  • 可以使用C-风格字符串来初始化string类: string str1=“apple”;或string str1={“apple”};
  • 可以使用cin来将键盘输入存储到string对象中。cin>>stl1;
  • 可以使用cout来显示string对象
  • 可以使用数组表示法来访问存储在string对象中的字符:str1[];

使用string类时,某些操作比使用数组更简单。

  • 可以将一个string类对象赋给另一个string类对象:str1=str2;
  • 可以使用+运算符将两个string类对象合并:str3=str1+str2、str1+=str2;
  • 可以使用头文件cstring提供的函数进行与处理数组相同的方式处理string类对象
  • 可以使用size()来求string类对象的字符数。

其他形式的字符串字面值

C++11新增的另一种类型是原始字符串raw。在原始字符串中,字符表示的就是自己。如果要使用转义字符就需要\\。

原始字符串将“(和)”用作定界符,用前缀R来标识原始字符串。

如果字符串中包含“(或)”了,就需要使用“+*(和)+*”做定界符。

猜你喜欢

转载自blog.csdn.net/GM_AMRC/article/details/83214222