数组和C风格字符串.ppt

上传人:牧羊曲112 文档编号:6579165 上传时间:2023-11-14 格式:PPT 页数:20 大小:286.16KB
返回 下载 相关 举报
数组和C风格字符串.ppt_第1页
第1页 / 共20页
数组和C风格字符串.ppt_第2页
第2页 / 共20页
数组和C风格字符串.ppt_第3页
第3页 / 共20页
数组和C风格字符串.ppt_第4页
第4页 / 共20页
数组和C风格字符串.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数组和C风格字符串.ppt》由会员分享,可在线阅读,更多相关《数组和C风格字符串.ppt(20页珍藏版)》请在三一办公上搜索。

1、第3章 数组和C 风格字符串,由除了前面介绍的基本数据类型外,C+还提供了复合数据类型以解决相对复杂的问题,这些数据类型是基于基本的整型、浮点型、char型和bool型等创建的,本章将介绍数组的相关知识很使用方法,以及数组与C风格字符串的关系。,3.1 什么是数组,将固定数目的同类型数据有序地组合在一起,在内存中连续排列,并用同一个名字来标识,这样一个结构称为数组。数组有以下几个特征:用一个名字命名一组数据。这组数据类型相同。这组数据的数目是确定的。每个数据称为数组的元素,每个元素在数组中有一个位置,即该元素在数组中的顺序关系,元素在内存中是连续排列的,换言之,数组占有一片连续的内存空间。程序

2、依靠元素在数组中的位置信息对元素进行访问,即数组名加下标的形式。和基本数据类型一样,要使用一个数组,必须先对其进行声明,声明的格式为:类型 数组名N1,N2,Nn;,3.2 维数组,一维数组也称向量,用以组织具有一维顺序关系的一组同类型数据,如某个班级所有人的成绩信息,和基本数据类型一样,在使用数组前必须先对其进行声明。,3.2.1 一维数组的声明,一维数组的声明形式为:类型 数组名N1;其中,N1必须是个整型常量,如5、10或const整型量。假定班级里有10个人,可以用下列形式声明一个数组以存储每个人的成绩:int age10;这样,编译器将一次性开辟10个存放int型数据的连续内存空间,

3、省却了声明10个int变量的麻烦,采用一维数组存储用户输入的10个数据,很显然,用一维数组处理具有顺序关系的数据比用简单变量要方便得多。,3.2.2 初始化一维数组,代码3-1通过用户输入数据对数组中的运算进行赋值,其实,在声明一个数组的同时也可以对各元素进行初始化,初始化表达式按元素的顺序依次写在一对花括号中,元素中间用逗号隔开,代码3-2与代码3-1是等价的。,3.2.3 一维数组应用举例,对数组中的元素进行处理,最有效的途径就是使用循环结构,前面的代码示例中已经粗略地体现了如何访问数组元素,下面的例子用以寻找数组中元素的最大值和最小值,见代码33。,3.2.4 数组操作注意事项,C+不允

4、许对数组进行整体操作,像数组比较,数组数据的输入输出等,必须通过逐一访问数组元素来完成,下列一些用法是不合法的:,3.3 C 风格字符串,在第2章中已经介绍了字符串常量的知识,C语言中的字符串是用一维字符型数组来实现,编译器把每个字符串理解为一个以0(空字符,null character)为结束符的一维字符数组,这种类型的字符数组常被称为C风格字符串,C+语言借鉴了这一用法。,3.3.1 C 风格字符串的声明,声明一个C风格字符串,使其内容为“I Love C+!”,代码如下:char str=I,L,o,v,e,C,+,+,!,0;上述代码在声明数组时没有指定大小,这样,编译器就会自行计算决

5、定数组的大小。对于C风格字符串的声明,推荐采用这种方式,免去了程序员自行计数的麻烦,如果由程序员指定的数组太小,编译器会报错,太大的话就浪费空间。但若在声明语句中无初始化表达式,则应该指出该字符数组的大小。可以看出,存储一个字符串所需字节数比该串的字符数多1,如存储“Hello”,该串有5个字母,但C风格字符串需要6个字节。而且,上述声明方式看上去很麻烦,要一个字母一个字母地用单引号包裹起来,还要记着后面的0,实际上,C+还提供了另一种声明C风格字符串的方法使用字符串常量,如:char str=”I Love C+!”;,3.3.2 字符数组的cin和cout,仅仅由字符组成,但结尾不是0的数

6、组不是C风格字符串,如:char str=H,e,l,l,o;如此声明的str只能称为字符数组,空字符0对C风格字符串十分重要,很多与之对应的处理函数和对象(包括cout和cin),都逐个处理C风格字符串的字符,直到遇到空字符为止,因此,对于“char str=H,e,l,l,o;”,cout在输出5个字符后,还会继续输出内存中后面字节的内容,直到遇到空字符为止,这时输出结果是不确定的,但由于内存中存在大量的空字节,所以这个过程应该可以很快停止。可以将C风格字符串(甚至是普通的字符数组)当成一个整体来进行输入输出操作,见代码34。,3.3.3 get()函数和getline()函数,那么如何将

7、含空格的字符串读到C风格字符串中呢?这要用到istream类中提供的getline()和get()函数,两个函数都用于读入一行输入,直到遇到换行符,但getline()函数丢弃换行符,而get()函数也将换行符存入C风格字符串中,关于istream类的详细介绍请参考第14章,这里先介绍两个函数的用法,见代码35。,3.3.4 cin与get()/getline()函数的搭配问题,在cin和get()/getline()函数搭配使用时,常常会出现问题,见代码36。,3.3.5 访问C风格字符串中的某个元素,C风格字符串是一类特殊的字符数组(最后一个元素是空字符0),可以通过“数组名下标索引”的方

8、式对某个元素(即字符串中的某个字符)进行访问和读写,见代码37。,3.3.6 C风格字符串处理函数,作为一种特殊类型的字符数组,C风格字符串可以使用cout和cin作整体的输入输出,但是,其他整体操作,如赋值、比较和连接等都是不允许的,如:char x10,y10=”ABCDEFGHI”;x=”123456789”;/错误x=y;/错误if(x y)/错误x+=y;/错误,3.4 多维数组,如果一个一维数组中的每个元素都是同类型同大小的一维数组,情况会是什么样子呢?图3.1表示了一个(M+1)(N+1)的二维数组,二维数组实质上是对一维数组的扩展,其中的每个元素要用两个下标来表示,前一个称为行

9、下标,后一个称为列下标。,3.4.1 声明一个多维数组,和一维数组一样,声明的主要作用就是提供给编译器足够多的信息,以便编译器在内存中开辟一块连续的,满足大小要求的内存区域,并将数组名和这块区域关联起来,这些信息包括:(1)数组名。(2)元素类型。(3)数组的维数。(4)数组的大小,多维数组的大小是各维大小之积。一个二维数组可以用下列语句来声明:int sz23;这声明了一个23的二维数组,共有2行3列计6个元素,对多维数组来说,元素的编号仍旧是从0开始的,所以,对上面这个二维数组来说,这6个元素分别为:sz00、sz01、sz02、sz10、sz11、sz12,3.4.2 初始化多维数组,多

10、维数组同样可以在声明的同时对其中的元素进行初始化,如:int sz34=1,2,3,4,5,6,7,8,9,10,11,12;或对部分元素进行初始化,如:int sz34=1,2,9,10,7,8;上面的语句仅初始化数组每一行的第一个元素,而未给其它元素赋初值,这种情况下,其他元素将自动初始化为0。在声明的同时初始化其中元素时,在一行中的元素用花括号包裹,并且用逗号隔开。当声明语句中提供有全部元素的初始值时,第一维的大小可以缺省,如:int sz 4=1,2,3,4,5,6,7,8,9,10,11,12;只提供部分元素的初始值时,必须能让编译器判断第一维的大小,这个参数才可省略,如:int s

11、z 4=1,2,3,4,2,3,;/等价于int sz 4=1,2,3,4,2,3;编译器认为是24维,3.4.3 多维数组应用举例,下面给出的示例代码39演示了如何转置一个二维数组,所谓转置,指的是将数组中的元素关于对角线对调。,3.4.4 多维数组在内存中是如何排列元素的,维数决定了数组中元素的组织方式及访问元素说用的下标个数,但本质上讲,所有的数组在内存中都是一维线性的。以二维数组为例,内存中是先放第一行的元素,再放第二行的元素,依次类推,下面给出了大小为34的二维数组A的排列顺序:A00-A01-A02-A03-A10-A11-A12-A13-A20-A21-A22-A23多维数组的存

12、储方式与此类似,以N维数组为例,内存中先放前N-1维索引都为0的那些元素,再放前N-2维坐标为0,第N-1维坐标为1的那些元素,下面给出333的三维数组B中元素在内存中的排列顺序:B000-B001-B002-B010-B011-B012-B020-B021-B022-B100-B101-B102-B110-B111-B112-B120-B121-B122-B200-B201-B202-B210-B211-B212-B220-B221-B222-,3.5 小结,本章主要介绍了数组与C风格字符串的知识。数组是同类型变量组成的集合,通过下标运算符可访问数组中特定的元素。C风格字符串是类特殊的一维字符数组:除存放字符串中的各个字符外,C风格字符串最后一个字符为空字符0。除字符数组可以用作整体的输入输出外,数组都不支持整体的操作,必须从元素的角度对数组进行控制,为了方便C风格字符串的处理,C+的库函数提供了一些常用处理函数,这些函数的声明可以在头文件cstring中找到。数组越界是一个严重的错误,使用数组时一定不能越界,由于编译器不对程序中出现的数组越界进行检查,所以,最好在使用时,对数组是否越界进行检查。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号