数组和字符串1.ppt_第1页
数组和字符串1.ppt_第2页
数组和字符串1.ppt_第3页
数组和字符串1.ppt_第4页
数组和字符串1.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 数组和字符串 本章主要内容: 数组基础 作为类成员数据的数组 对象数组 C字符串 标准的C+string类 7.1 数组基础 v首先看一个简单的例子 vReplay创建一个4个整数的数组,来表示4个人的年龄。 vstudentProgsCh07Replay.cpp v第一个for循环从用户处获得年龄的信息,然后把它们放入 数组,而第二个循环从数组中读取它们并显示出来。 7.1.1 定义数组 v 数组在使用之前,必须先定义,并且指定数据类型和名称 。 v 数组还有另外一个特性:数组大小。如图7-1所示(189页 )。 v 在replay示例中,数组的类型是整型。 7.1.2 数组元素 v 数组内的数据项为元素。在任何一个数组中的元素都是相 同类型的,区别在于它们的值是不同的。如图7-2所示(190 页)。 v 注意:第一个数组元素的编号为0,最后一个为3。 7.1.3 访问数组元素 v 在replay示例中,每个数组元素被访问了两次。一次是输 入,一次是输出。 7.1.4 取数组元素的平均值 v -自己看吧。 7.1.5 初始化数组 v 看图7-3所示(图)。 v 如果初始化所有的数组元素,则不必写上数组大小,因为 编译器可以通过初始变量的个数知道它。如: v int days_per_month = 31,28,31,30 v v 7.1.6 多维数组 v 看一个二维数组的例子 : v studentProgsCh07Salemon.cpp v 定义多维数组: v 数组的定义用两个用方括号围住的说明符: v double salesDistrictsMonths; v 具体描述可以看书194页图74所示。 v 当然,数组也可以多于两维。三维: v int dimen ; v 访问多维数组的元素 v 二维数组中的数组元素需要两个下标: v salesdm; v 注意:每个下标都有一对方括号。 v 编排数据的格式 v 自己看一下吧。 v 初始化多维数组 v studentProgsCh07Saleinit.cpp v 讲解一下。 7.1.7 向函数传递数组 v 看下面的例子: v studentProgsCh07Salefunc.cpp v 带有数组参数的函数声明: v 在函数函数声明中,数组参数用数据类型和数组大小来表示。下面是 display()的声明: v void display(floatDistrictsMonths); v 实际上,下面的语句同样有效: v void display(float Months); v 为什么函数不需要知道第一维的大小呢?二维数组是由数组组成的数 组。函数首先将参数看做表示地区的数组。它不需要知道有多少个地区 ,但是需要知道每个用于表示地区的元素的大小。 v 如果声明的函数将一元数组作为参数使用,则无需指明数组的大小。 v void somefunc(int elem ); v v 涉及数组参数的函数调用: v 当函数被调用时,只使用数组的名称。 v display(sales); v 名称实际上表示了数组在内存中的地址。第十章会有详细 描述。 v 使用数组参数的地址与使用引用参数的地址相似,数组参 数的值并没有在函数中重复出现。函数对原始数组进行操作 ,就像引用一样。尽管访问的时候是不同的名称。这个系统 用于数组是因为数组可能很大;在每个调用的函数中都产生 数组的副本,将会耗费大量的时间和内存空间。 v 然而,地址和引用是不同的。在函数声明中,不会将符号 ( v 数组参数使用数据类型、名称和数组各维的大小。函数使 用的函数名可以和数组定义的名称不同,不过它们涉及的是 同一个数组。必须指定所有数组的数组维数;函数需要利用 它们来正确地访问数组元素。 v 要引用函数中的数组元素,就要使用数组的函数名称: v funsalesdm v 如果数组在函数地内部定义,那么函数可以通过其他任何 方法访问数组元素。 7.1.8 结构数组 v 数组可以像包含简单的数据类型一样包含结构,以下示例 基于第四章“结构”地Part结构。 v studentProgsCh07Partaray.cpp v 用户输入模型数量、零件数量和零件的价格。 v 结构数组在这个语句中的定义: v part apartsize; v 它和简单数据类型的数组语法一样。如果结构成员本省是 数组元素,则访问它的数据项会涉及新的语法,比如: v apartn.modelnumber v 涉及到modelunmber成员,它是apart数组元素n这个结构 地成员。具体如图75所示(200页)。 v 可以考虑写输入本班的成绩,并进行排序。 7.2 作为类成员数据的数组 v 在类中,数组作为数据项使用。-下面看计算机数据结构 建模的示例:堆栈。 v 堆栈的工作原理就像一个自助餐厅中支撑碟子的弹簧装置 。当把碟子放在顶端时,堆栈就会下沉一些:当拿走碟子, 堆栈便会弹出。最后一个放在堆栈上的碟子总是第一个拿走 。 v 堆栈是现代计算机使用微处理器体系结构的基石。 v 函数通过堆栈传递参数和存储返回地址。 v 看示例:Stakaray v studentProgsCh07Stakaray.cpp v 数组st是堆栈重要的成员。Int类型的变量top,指示出在 堆栈中放置的最后一项的指针;这一项的位置即是堆栈的栈 顶(top)。 v 下名的语句中,作为堆栈的数组的大小由Max指定。 v enum max = 10 ;-枚举方式。 v Max的定义是不同寻常的。如果要与封装的思想保持一致, 则定义完全在类中使用的常量是更好的,比如此处在类中的 max。因此,为了达到这个目的而使用全局变量,并不是最佳 的方法。标准C+可以在类中声明max,比如: v static const int Max = 10; v 这表明Max是一个常量,并且可以应用于类中的任何对象。 -一般我们用这种方法来实现。 v 图7-6(202页)所示:表现了堆栈的方式,在图中,内存 向下增长,因此栈顶在图的底端。向堆栈加入某一项时,栈顶 指针改为指向新的栈顶而当清除某一项时,栈顶指针又会减1 。 v 通过作为参数存储的值,调用Push()成员函数将单元放 入堆栈,也被称将为单元压入堆栈。要从堆栈中取出单元,则 需要使用Pop()成员函数,它能返回单元的值。 v注意:在堆栈问题上,最后入栈的最先弹出。在成员函数 Push()中的语句: v st+top = var; v首先将栈顶指针加1,然后将var赋值给下一个有效的数组元 素,使其成为新栈顶。 v return sttop-; v 先返回它在栈顶找到的值,然后将栈顶指针减1,于是栈顶 指针指向前一个元素。 7.3 对象数组 v 创建以对象为元素的数组。-看下面的例 子。 7.3.1 英制长度数组 v studentProgsCh07Englaray.cpp v 根据上面的例子,我们可以写有关输入数据的平均值、将它 们写入到磁盘或者进行其他方面的操作。-可以在类中再写成 员函数。 v数组范围 v 我们在写程序的时候,一定要注意数组范围,并且要进行数 组范围的检查。如果超出范围,则提示警告信息等。这样可以 避免程序出错。 v访问数组中的对象 v 如图7-7(205页)所示:访问作为数组元素的类成员函数, 如下所示: v distj.showdist(); v 访问作为数组元素的对象成员函数,使用了点运算符;数组 名后面跟着方括号和下标,然后是成员函数,连接它们的是点 运算符。 v 还有调用成员函数getdist(),使用了n+: v distn+.getdist(); v do循环,将变量自增的操作方式。-这样做 为什么? 7.3.2 纸牌示例-自己看 7.4 C字符串 v C+有两种字符串经常使用:C字符串和String类的对象 。 7.4.1 C字符串变量 v 看如下例子:要求输入一个字符串,并且将这个字符串放 入字符串变量,然后再显示这个字符串。 vstudentProgsCh07Stringin.cpp v 字符变量str的定义看上去是char类型的数组定义: v char strmax; v 看图7-9(209页)所示: v 每个字符占用1字节的内存。字符串的一个重要的方面, 就是它必须以一个包含0的字节终止。通常用“0”来表示, 它是AscII码的值为0的字符。这个用于终止的0称为空字符 。当运算符不会把它们放入数 组中。事实上,放入数组的字符个数比指定的少一个,因为 缓冲区中需要有空间来容纳用于终止的空字符。 7.4.3 字符串的控制 v studentProgsCh07Strinit.cpp v 在这个例子中,可以直接用“”围起来,就可以执行。 v 一般是: v char str = a,b,c; v 现在改成例子中,也是可以的。-这样更好。 7.4.4 读取字间的空格 v 由于在运算符将空格看做终止的字符。有关这个问题 ,可以用cin.get()来解决,也可以12章cin的成员函数 ignore()。 7.4.5 读取多行信息 v -自己看一下。 7.4.6 用麻烦的方法复制字符串 v studentProgsCh07Strcopy1.cpp v 例子中使用了strlen()函数,用到的头文件CString。 v 复制得到的字符串必须以空字符作为结束。 v str2j = 0; v 如果不加入这一字符,在程序输出时,会有乱码出现的。 7.4.7 用简单的方法复制字符串 v 可以使用库函数来复制字符串,strcopy()。 v studentProgsCh07Strcopy2.cpp v strcopy(str2, str1);-将str1的内容复制给str2. 4.7.8 字符串数组 v studentProgsCh07Straray.cpp v 可以将字符串数组看成一个二维数组。如图7-10(214页) 所示。 v 注意:因为字符串的长度小于最大长度,所以在字符串之 后的一些字节就被浪费了。在学习指针时,我们将学习如何 去掉无效部分。 v starj; v 要访问这些元素,不必使用第二维的下标。 7.4.9 作为类成员的字符串 v studentProgsCh07Strpart.cpp v 这个程序中,定义了两个Part类的对象,并且通过成员函 数setpart()给它们赋值,然后再通过成员函数showpart()显 示它们。 7.4.10 用户自定义的字符串类型 v c字符串在c+中的使用比较特殊,首先,不能用如下语句 进行赋值: v strDest = strSrc; v 下节将介绍C+的string类对这个问题比较注意。不过我们 现在自己使用类的对象来操作。 v 程序StrOb创建了一个名为String的类。C+内部标准的 string中的s是小写。 v studentProgsCh07Strobj.cpp v 在String类包含了一个char类型的数组。数组被包含在类 中,通过”=”运算符,一个对象就能被赋给同一个类的另一 个对象的值。 v 如: s3 = s1 ; v 这样就可以执行了。 v strcat(str, s2.str);-将第二个参数的字符串加到第一个参 数的字符串。 7.5 标准的c+ string 类 v C+包含了string的新类,string类接管了所有的内存管理 任务。 7.5.1 定义和访问string对象 v studentProgsCh07sstrass.cpp v 在本程序中,代码的前三行展现了三种定义string对象的 方法。前两种初始化string对象,第三种创建了空的string 变量。 v string使用了许多重载运算符。-下一章我们将介绍运算符 重载。 v 重载的+运算符连接两个string对象。如: v s3 = “Neither” + s1 +” nor ”; v 同时这个示例也引入了第一个string的成员函数,swap() ,它的功能是将两个字符串对象的值进行交换。一个对象调 用它,而另一个对象则作为它的参数。如: v s1.swap(s2); 7.5.2 string 对象的输入输出 v 处理string对象时运算符都被重载了,而且函数 getline()能够处理带有字间空格的多行输入。 v studentProgsCh07sstrio.cpp v 程序使用了getline()读取用户的姓名,假设含有字间空 格。这个函数是成员函数。它的第一个参数是流对象,这里 将会出现输入的信息(此处是cin),第二个参数是要放置 文本的string对象full_name. v 最后,程序使用了携带三个参数的getline()的成员函数,其 中第三个参数指定终止结束的字符“$”,用户必须在正式输 入的最后一个字符之后输入该字符,然后按回车键。如果没 有给getline()提供第三个参数,则界定符将会是“n”,它代表 回车键。 7.5.3 查找string对象 v string类有用于在string对象中查找字符串和子串的成员函数。 v studentProgsCh07sstrfind.cpp v 函数find()在调用它的字符串中查找作为其参数的字符串。并返回所在 的位置。 最左边的字符位置的编号为0。 v 函数find_first_of()查找所有字符组,并返回它找到的第一个字符的位 置。在此处它查找任何一组“s”、“p”、“d”、“e”。第一个找到的是 xanadu中的d,它的位置是7。 v 与之相似的函数find_first_not_of()也是查找第一个出现的字符,不过 它不属于指定的那一组字符。 v find_last_of()和find_last_not_of(). v 如果没有找到目标字符,则所有函数的都会返回-1。 7.5.4 修改string对象 v studentProgsCh07sstrchng.cpp v 本例演示了成员函数erase()、replace()、insert() 。 v 函数erase()将子串从字符串中移出。它的第一个参数是子 串第一个字符的位置,第二个参数是子串的长度。 v 函数replace()用一个字符串置换另一个字符串的一部分。 置换部分的起始位置是第一个参数,第二个参数是要替换的字 符串的字符的个数,第三个则是用来置换的字符串。 v 函数insert() v 将第二个参数指定的字符串插入到第一个参数提供的位置。 v append()将3个叹号加在了句尾。第一个参数是要添加的 字符个数,第二个是要添加的字符。 v 在程序的结尾给出了用find()查找空格字符 ,并用斜杠 来代替。 7.5.5 比较string的对象 v 可以使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论