《数组和字符串》PPT课件.ppt

上传人:小飞机 文档编号:5520186 上传时间:2023-07-18 格式:PPT 页数:127 大小:766.50KB
返回 下载 相关 举报
《数组和字符串》PPT课件.ppt_第1页
第1页 / 共127页
《数组和字符串》PPT课件.ppt_第2页
第2页 / 共127页
《数组和字符串》PPT课件.ppt_第3页
第3页 / 共127页
《数组和字符串》PPT课件.ppt_第4页
第4页 / 共127页
《数组和字符串》PPT课件.ppt_第5页
第5页 / 共127页
点击查看更多>>
资源描述

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

1、数组和字符串,第五章,数组的概念;,数组的应用;,数组的定义;,字符串,本章授课内容,常见错误,5.1 数组的概念,数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。,在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了便于处理一批类型相同的数据,引入了数组。,假设现在要求保存每个学生的成绩,那就不能只使用一个变量score了,而需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出

2、、计算都可通过循环来实现。,一、数组的引入,#include void main()int j,sum,score 40;float ave;sum=0;for(j=0;jscore j;sum=sum+score j;ave=sum/40;cout“ave=”ave;,1.数组:由具有相同类型的 固定数量的元素组成的结构。,2.数组元素:每一个数组元素 都是一个变量,为了与一般 的变量相区别,我们称数组 元素为下标变量。注:直接前驱和直接后继的概念,3.下标变量在数组中的位置 序号称下标 下标变量的数据类型称为 下标类型(或元素类型),二、数组的概念,返 回,5.2 一维数组,一、一维数组的

3、定义,二、一维数组的存储结构,三、数组元素的引用形式,四、一维数组的初始化,六、一维数组程序设计举例(算法),五、一维数组的输入和输出,数组 由一组具有同一数据类型 的变量有序 集合。,例如:int a10;,数组名,常量表达式,类型说明,一、一维数组的定义,格式:常量表达式=;,int a10;,数组名命名规则同标识符数组名表示了一个存储区的首地址(即第一个数组元素的地址),int n;cinn;int an;.,常量表达式中不能有变量常量表达式的值不能是实数,下标从0开始,a0,a1 a9,没有a10;,常量表达式的值为元素的个数,返 回,二、一维数组的存储结构,a,一个数组的所有元素都是

4、连续存储的,数组元素为:a0,a1,a2.a9,int a10;,所占空间为:类型空间*元素个数,返 回,三、数组元素的引用形式,数组元素的引用:数组名下标 其中,为下标运算符,a0=a2+a4*2,2,4,0,int a10;a0=2;,int a10,b10;,说明(1)下标可以是整型常量或整型表达式 如:a1,a2*3,(2)数组定义为 int a5,数组长度为5 而下标在0-4之内,即a0-a4,注意:如果出现 a5=72;编译时不会指出错误,系统会将a4后下一个存储单元 赋值为72,但这样可能会破坏数组以外其他变量的值。,返 回,四、一维数组的初始化,1.概念:在定义一维数组时对各元

5、素指定初始值称为 数组的初始化。,如:int a5=1,3,5,7,9;,2.说明 对数组的全体元素指定初值,初值用 括起来,数据 之间用逗号分开.在这种情况下,可以不指明数组的 长度,系统会根据 内数据的个数确定数组的长度。如:int a=1,3,5,7,9;,(2)对数组中部分元素指定初值(这时不能省略数组长度)如:int a5=1,3,5;注:后面的两个元素自动初始化为0。,(3)使数组中的全部元素初始值都为 0 如:int a5=0,0,0,0,0;,更简单的写法:int a5=0;,注:double a为错误,例5.2.1:输入n个成绩,求平均分;输出高于平均分的成绩,#includ

6、evoid main()int sc,n,i;float aver=0.0;cinn;for(i=0;isc;aver+=sc;aver/=n;coutaverendl;,int sc50,n,i;,cinsci;aver+=sci;aver/=n;for(i=0;iaver)coutsciendl;,返 回,五、一维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,cinai;,输入整个数组元素:,for(i=0;iai;,输出方法:,输出第i个数组元素:,coutai;,输出整个数组元素:,for(i=0;

7、i10;i+)coutai;,返 回,例5.2.2:用一维数组求Fibonacci 数列(斐波纳契数列),#includevoid main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutn;coutt fi;coutn;,六、一维数组程序设计举例,f0f1f2f3f4f5:f19,i=2f2=f0+f1,i=3f3=f1+f2,i=4f4=f2+f3,2,3,5,8,6765,例5.2.3:输入一个数据,在已知数组中查找是否有该数据,9,a0a1a2a3a4a5a6a7a8a9,#incl

8、ude void main()int i,x;int a10=5,8,0,1,9,2,6,3,7,4;cinx;for(i=0;i10;i+)if(x=ai)coutfind!endl;break;if(i=10)cout no find!endl;,返 回,注:if(x=aibreak;是for循环体语句,后面的语句不是for循环体语句。,5.3 二维数组,一、二维数组的定义,二、二维数组的存储结构,三、二维数组的初始化,四、二维数组元素的引用形式,五、二维数组的输入和输出,六、二维数组程序设计举例,返 回,一、二维数组的定义,格式:=,;,int b23;,b为23(2行3列)的数组,b0

9、b1,b,-b00 b01 b02,-b10 b11 b12,b0b1,b00,b01,b02,返回,b10,b11,b12,二、二维数组的存储结构,int b23;,b10,b11,b12,b00,b01,b02,存放顺序:按行存放,先顺序存放第 一行 的元素,再存放第二行的元素。,a10a11a12,a20a21a22,a00a01a02,a00a01a02a10a11a12a20a21a22,101010141018102210261030103410381042,数组的元素在内存中是连续存放的 int a33;的存放形式如下:,a0a1a2,返回,三、二维数组的初始化,int b23=

10、1,2,3,4,5,6;,int b23=1,2,3,4,5,6;,int b3=1,2,3,4,5,6;,int b5int b;int b=1,2,3,4,5,6;int bnm;,错!,分行赋值,按数组排列的顺序赋值,若全部都赋初值,第一维长度可省略,注意:此方法数据没有明显的界限,当数据较多时容易出错,将数据依次赋给元素 b00,b01 b12,返回,四、二维数组元素的引用形式,数组名下标1下标2,b02=b10+b00-b02;,数组元素可以出现在表达式中,也可以被赋值,引用形式:,int a34;.a34=4;,错!,注意:(1)每个下标都要用 括起来 如 a 2 1 不能写成 a

11、 2,1(2)下标不要超过定义的范围,返回,五、二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),int b23,i,j;,返回,六、二维数组程序设计举例,例5.3.4:有一个3*4的矩阵,编程求出其中的最大值及其所在的行号和列号。,max,row,col,12,1,2,#include void main()int i,j,row=0,col=0,max;int a34=5,2,0,9,3,7,12,6,10,4,1,8;max=a00;for(i=0;imax)max=aij;row=i;col=j;coutmax=maxendl;coutmax=arowc

12、olendl;,输出:max=12max=a12,例5.3.5:将一个矩阵进行转置(即原来的行变为列),#includevoid main()int a34,b43,i,j;for(i=0;iaij;for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;for(i=0;i4;i+)for(j=0;j3;j+)coutbijsetw(3);coutendl;,输入数组a,进行矩阵转置,输出数组b,a02,b20,a21,b12,返回,5.3*三维数组的定义和使用,C+语言可以定义和使用三维及更高维的数组。格式:=,例如:int sP M N;,int s234;,int x23

13、4=1,2,3,4,5,6,7,8,1,3,5,7,0,0,0,0,0,0,0,0,0,0,0,0;,s100=5;,s111=s100*5;,举例:,5.4 使用typedef语句定义数组类型,可以利用typedef语句先定义出数据类型,再据此定义出相应的数组变量。1.一维数组类型的定义语句格式:typedef;举例:(1)typedef int vector10;/定义一个一维数 据类型vector vector v1,v2;/定义vector类型的两个对象 v1,v2,5.4 使用typedef语句定义数组类型,1.一维数组类型的定义语句(2)typedef char strings80

14、;strings s1,s2=define type;(3)typedef short int arrayN;array a=25,36,19,48,44,50;/假定N为 大于等于6的某个常数,5.4 使用typedef语句定义数组类型,2.二维数组类型的定义语句格式:typedef;举例:(1)typedef int matrix55;matrix mx=0;(2)typedef char nameTable10NN;nameTable nt=“”;/或使用等同的0初始化(0为空字符)(3)typedef double DataTypeM+1N+1;DataType dd=0.0;,5.4

15、 使用typedef语句定义数组类型,注:可以是C+语言中预定义的任何一种数据类型或用户已定义的任何一种数据类型。如:typedef vector vectorSet20;/数组共20行10列 vectorSet vs;,5.4 使用typedef语句定义数组类型,3.对已有类型定义别名 举例:typedef int inData;inData x,y;,5.5.1 数值计算 书中给出了三个例子,一个是计算个人所得税(P126(1)),二是进行矩阵求和(P128(2),三是按月进行公司产值计算,都具有代表性 P128(2),5.5 数组的应用,5.5.2 统计 书中给出了两个例子,一是统计每个

16、候选人的选票(P130(1),二是统计每个用电区间的居民户数:P130(1),5.5.3 排序 书中介绍了两种方法:选择排序和插入排序(P132 P133见后),5.5.4 查找 书中介绍了两种方法:顺序查找(不要求数组元素有序排列)P134(1)和二分查找(要求数组元素有序排列)P135(1),5.5.1 数值计算,例5-1-1(P126(1))计算个人所得税 我国目前对个人工资月收入征收所得税的办法如表5-1所示,编一程序,根据一个人的工资月收入计算出应缴纳的税额和税后所得的金额。,表5-1 个人月收入所得税表,例5-1-1 计算个人所得税,分析:每一级的级距上界(10级上界用1e9来表示

17、,设一0级,上界设为0)构成一个数列a;每一级税率组成一个数列b。a=(0,1600,2100,3600,6600,21600,41600,61600,81600,101600,1e9)b=(0,0,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45)假设用x表示一个人的工资月收入,用i表示x所对应的级数,用y表示工资月收入为x应缴纳的税额,则y的计算公式为:,其中,例5-1-1 计算个人所得税,#includeconst int N=11;void main()double aN=0,1600,2100,3600,6600,21600,41600,616

18、00,81600,101600,1e9;double bN=0,0,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45;double x,y;cout输入一个人的工资月收入(单位元):;,例5-1-1 计算个人所得税,cinx;int i,j;for(i=1;i=1;j-)y+=(aj-aj-1)*bj;cout月工资所得税:yendl;cout税后实发金额:x-yendl;,例5-1-2(P128(2)求两矩阵和,已知两个矩阵A和B如下,编一程序计算出它们的和。,例5-1-2(P128(2)求两矩阵和,#includeconst int N=3;void

19、 main()int aNN=7,-5,3,2,8,-6,1,-4,-2;int bNN=3,6,-9,2,-8,3,5,-2,-7;int i,j,cNN;for(i=0;iN;i+)/计算矩阵C for(j=0;jN;j+)cij=aij+bij;,例5-1-2(P128(2)求两矩阵和,for(i=0;iN;i+)/输出矩阵Cfor(j=0;jN;j+)coutsetw(5)cij;coutendl;,例5-1-3(P128(2)按月进行公司产值计算,例5-1-3 有一家公司,生产五种型号的产品,上半年各月份的产量如表5-2所示,每种型号产品的单价如表5-3所示,编一程序计算出该公司上半

20、年的总产值。,表5-2 产量统计表,表5-3 单价表,例5-1-3(P128(2)按月进行公司产值计算,#includevoid main()int b65=438,269,738,624,513,340,420,572,726,612,455,286,615,530,728,385,324,713,594,544,402,382,550,633,654,424,400,625,578,615;int c5=1500,2550,3640,5200,7360;double d6=0;double sum=0;,例5-1-3(P128(2)按月进行公司产值计算,int i,j;cout.preci

21、sion(10);/使输出最多保留10位数字精度,默认为6 位for(i=0;i6;i+)for(j=0;j5;j+)/计算出第i+1月份的产值di+=bij*cj;couti+1月份:di元n;/输出第i+1月份的产值sum+=di;/把第i+1月份的产值累加到sum中coutendl“总产值:”sum“元”endl;/输出上半年总 产值,5.5.2 统计,例5-2-1(P130)假定有一个协会在换届选举中由全体会员无记名投票直选主席,共有5名侯选人,每个人的代号分别用1、2、3、4、5表示,每名会员填写一张选票,若同意某名候选人则在其姓名及代号后打上对号即可,当然每张选票只能有一个对号,否

22、则无效。编一程序根据所有选票统计出每位候选人所得票数,其中每张选票上所写候选人的代号由键盘输入,当输入完所有选票后用-1作为终止数据输入的标志。分析:设一个一维数组a6代表候选人,下标为0不用,下标1,2,3,4,5分别代表候选人15。,例5-2-1(P130),#includevoid main()int i,a6=0;/作为统计而使用的数组,每个元素初始值为0couti;while(i!=-1)if(i=1,例5-2-2(P131),某研究机构对我国职工工资状况进行调查,把工资划分为11个区段,每隔1000为一个区段,即1999为第1区段,10001999为第2区段,10 000及以上为第

23、11区段。编一程序,首先把调查得到的一批职工的工资数据输入到一个数组中,然后分别统计出每个区段内的职工人数及占总职工数的百分比。,例5-2-2(P131),分析:用c11表示11个区段,用aN保存N个职工的工资,N为一个符号常量。先定义aN并输入各元素值,工资小于等于0则结束输入;接着c11初始元素值都为0,依次读取aN中各元素值,对1000整除确定出相应的统计区段,使c数组中相应的元素值增1;最后计算出百分比并输出。,例5-2-2(P131),#includeconst int N=100;/假定N的值为100void main()double aN;int i=0;double x;cou

24、tx;if(x=N)cout数据输入完毕!n;break;ai+=x;,附录(通过程序查看i+及while循环结束后的i),例5-2-2(P131),int c11=0;/初始化c数组中的每个元素值为0int k=i-1;/k的值为a数组中保存的最后一个工资的下标值for(i=0;i=k;i+)if(ai10000)cint(ai)/1000+;else c10+;for(i=0;i10;i+)couti*1000i*1000+999:;coutci,int(ci*1.0/(k+1)*100)%n;cout10000及以上:;coutci,int(c10*1.0/(k+1)*100)%n;,5

25、.5.3 排序,例:输入5个数,进行由小到大排序:9、8、5、4、2。,算法:两两比较,大数向后移,找到最大数放在最后,再在剩余的的4个数中进行两两比较,找到最大数,以次类推.最后,小数排在开始,相当于浮起,故称之为:冒泡法,1.已知一组数据,按一定的顺序排序(1)冒泡法排序,85429,5428,425,24,比较4次第一轮,比较3次第二轮,比较2次第三轮,比较1次第四轮,98542,89542,85942,85492,8542,5842,5482,542,42,452,对 n 个数,则要进行n-1趟扫描,在第 i(i从1开始)趟扫描中要进行 n-i 次比较。,可以推知:,/*排序*/for

26、(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;,返回,趟,每趟比较次数,#include#define N 5void main()int i,j,aN,t;for(i=0;iai;for(i=0;iN;i+)/*输出*/coutai;coutn;,/*排序*/for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)/*输出*/coutai;coutn;,源程序:例,(2)选择法排序,特点:比较后不立即互换元素,而是记下其位置并在每一轮比较完毕后和a()互换 首先,比较的元素不同,以降序为例,是当前元素与上次比较后的最大元素进行比较,因此

27、,在进行比较之前,要有一个初始化最大元素的过程 其次,确定完毕的元素的互换是在每一轮完成后进行的,而不是在比较后进行的 再次,互换元素的不同,为a(i)和a(iMax)举例:例原始数据:3,5,7,9,4 要求:降序,第一轮比较,初始化设最大元素下标为 k03579k=0 3579 k=13579 k=23579k=3k=3a(i)与 a(k)交换的结果:9573,/*设置变量k用以存储当前最大数的下标*/,#include void main()int a5,i,j,k,t;for(i=0;iai;for(i=0;i4;i+)k=i;for(j=i+1;j5;j+)if(akaj)k=j;i

28、f(k!=i)t=ai;ai=ak;ak=t;for(i=0;i5;i+)coutai;coutendl;,源程序:例,例5-3-1(P132)选择法排序,已知有10个常数为42、65、80、74、36、44、28、65、94、72,编一程序,采用选择排序方法,按照从小到大的顺序输出。,例5-3-1(P132)选择法排序,#include const n=10;int an=42,65,80,74,36,44,28,65,94,72;void SelectSort()/选择排序算法int i,j,k;for(i=1;in;i+)/进行n-1次选择和交换k=i-1;/给k赋初值,例5-3-1(P

29、132)选择法排序,for(j=i;jn;j+)/选择出当前区间内的最小值akif(ajak)k=j;int x=ai-1;ai-1=ak;ak=x;/交换ai-1与ak的值void main()SelectSort();/调用函数对数组an进行选择排序for(int i=0;in;i+)coutai;/依次输出数组an中的每个元素值coutendl;,注:不同把“int x=ai-1;ai-1=ak;ak=x;”这条语句中的i看成j。,例5-3-2(P133)插入法排序,已知有10个常数为42、65、80、74、36、44、28、65、94、72,编一程序,采用插入排序方法,按照从小到大的顺

30、序输出。思路:将数组an中的元素看成一个有序表和一个无序表,开始有序表只有一个元素a0,无序表中有a1an-1个元素,从无序表中每次取出第一个元素插入有序表的合适位置,循环进行这一步骤,经过n-1次插入过程后整个数组就是一个有序表。,例5-3-2(P133)插入法排序,#include const n=10;int a10=42,65,80,74,36,44,28,65,94,72;void InsertSort()/插入排序算法int i,j,x;for(i=1;in;i+)/进行n-1次选择循环,每次插入一个元素到有序表x=ai;/将此次待插入元素存入x,例5-3-2(P133)插入法排序

31、,for(j=i-1;j=0;j-)/为x顺序向前寻找插入位置if(xaj)aj+1=aj;/*元素值后移*/else break;aj+1=x;/将x插入已找到的插入位置void main()InsertSort();/调用函数对数组an进行选择排序for(int i=0;in;i+)coutai;/依次输出数组an中的每个元素值coutendl;,2.在有序数组中插入一个数后使原数组仍然有序例如:3 5 7 12 18,将b=10插入步骤:(1)要找到b在数组中的位置(2)给b让位置(3)将b放到该位置上,b=10,for(i=0;ib)break;,for(j=4;j=i;j-)aj+1

32、=aj;,ai=b;,12,18,10,程序见例,例,#include const n=5;int a5=3,5,7,12,18;void main()int i,j,b=10;for(i=0;ib)break;for(j=4;j=i;j-)aj+1=aj;ai=b;for(i=0;i6;i+)coutai;coutendl;,3 5 7 10 12 18,将b=10删除步骤:(1)要找到b在数组中的位置(2)后面的数组元素依次前移,覆盖该位置上的数组元素即可实现删除,3.在有序数组中删除一个数例,for(i=0;i6;i+)if(ai=b)break;,10,12,18,for(j=i;j5

33、;j+)aj=aj+1;,例5.5.4,#include const n=5;int a5=3,5,7,10,12,18;void main()int i,j,b=10;for(i=0;i6;i+)if(ai=b)break;for(j=i;j5;j+)aj=aj+1;for(i=0;i5;i+)coutai;coutendl;,是对有序数列进行查找的一种高效查找办法,其基本思想是逐步缩小查找范围,采取半分作为分割范围可使比较次数最少.比较过程:(设数列已做降序排序处理)设置三个变量,分别代表数组序列 s 的Top,Bottom和Middle位置,其中Middle=(Top+Bottom)/2

34、,进行下列判断,1 3 4 6 8 10 12 15 18 20 25,X=15,5.5.4 查找,(1)顺序查找,(2)折半查找法:对有序数组,返 回,程序见例5-4-1(P134)例5-4-2(P135),(1)顺序查找,例5-4-1(P134)假定在一维数组a10中保存着10个整数42、55、73、28、48、66、30、65、94、72,编一程序从中顺序查找出具有给定值x的元素,若查找成功则返回该元素的下标位置,否则表明查找失败返回-1。,例5-4-1(P134),#includeconst int N=10;/假定把数组中保存的整数个数用符号常量N表示int SequentialSe

35、arch(int a,int n,int x)/从数组an中顺序查找值为x的算法for(int i=0;in;i+)if(x=ai)return i;/查找成功返回元素ai的下标值return-1;/查找失败返回-1,思考:第3行后面加上“;”,会怎样?,例5-4-1(P134),void main()int aN=42,55,73,28,48,66,30,65,94,72;int x,y;while(1)coutx;if(x0)cout程序运行结束!n;return;y=SequentialSearch(a,N,x);/返回元素下标或-1赋给yif(y=-1)cout查找x失败!endl;e

36、lse cout查找x成功!下标为yendl;,(2)折半查找法(二分查找):对有序数组,例5-4-2(P135)假定一维数组aN中的N个元素是一个从小到大顺序排列的有序表,编一程序从a中二分查找出其值等于给定值x的元素。,二分查找:查找37,low,mid,high,low,low,mid,mid,high,high,二分查找:查找70,low,mid,high,low,high,low,low,mid,mid,high,high,例5-4-2(P135),#includeconst int N=10;/假定把数组中保存的整数个数用符号常量N表示int BinarySearch(int a,

37、int n,int x)/从数组an所存的有序表中二分查找值为x的算法int low=0,high=n-1;/定义并初始化区间下界和上界变量int mid;/定义保存中点元素下标的变量,例5-4-2(P135),while(low=high)/进行二分查找的循环过程mid=(low+high)/2;/计算出中点元素的下标if(x=amid)return mid;/查找成功返回else if(xamid)high=mid-1;/修改high得到左区间else low=mid+1;/修改low得到右区间return-1;,例5-4-2(P135),void main()int aN=12,26,3

38、7,45,48,52,60,66,73,90;/定义数组aN并初始化int x,y;while(1)cout从键盘上输入一个待查找的整数(小于等于0则结束):;,例5-4-2(P135),cinx;if(x0)cout程序运行结束!n;return;y=BinarySearch(a,N,x);/返回元素下标或-1赋给yif(y=-1)cout查找x失败!endl;else cout查找x成功!下标为yendl;,思考:数组改为无序数组结果会怎样?,5.6 字符串,二、字符串及字符串结束标志,四、字符数组的输入和输出,七、字符串处理函数,八、字符数组程序应用,一、字符数组的定义,三、字符数组的初

39、始化,返 回,五、利用二维数组存储字符串,六、二维数组的输入输出,一、字符数组,用来存放字符数据的数组为字符数组。,char c10;,char c10=k,A,m,K,a,p,P,y;,若初值个数小于数组长度,剩余元素自动定为空字符,char c12=c,p,r,o,g,r,a,m;,int c10;,定义,初始化,二者存储空间不同,返回,#includevoid main()char c12=c,p,r,o,g,r,a,m;int i;for(i=0;i12;i+)cout第i个元素为ciendl;,二、字符串和字符串结束标志,C+中没有专门的字符串变量,因此字符串存放在字符数组中,字符串

40、以“0”作为结束标志,字符串:由若干个有效字符组成的序列 有效字符包括字母,数字,专用字符,转义字符 如:“bfer”“a45-7”“mtkn”,例:char c5;,c0=O;c1=K;c2=!;,c0=O;c1=K;c2=!;c3=0;,注意:字符数组与字符串并不相同,返回,说明:p137,注:一个字符串的长度等于双引号内所有字符长度之和。每个ASC码字符或转义字符的长度为1,每个区位码(如汉字)的长度为2。特殊地,当一个字符串不含有任何字符时,称为空串,其长度为0,是一个空串。一个空串和一个空格串是不同的,空串的长度是0,空格串的长度是1。coutchn中包含11个字符。,三、字符数组的

41、初始化 1.为数组中的元素指定初值 char c8=H,e,l,l,o;,如果对数组全部元素指定初值,则可以省略数组的长度char c=H,e,l,l,o;,2.对字符数组指定字符串初值,char c8=“Hello”;char c8=“Hello”;char c8=H,e,l,l,o,0;/0 也可直接写为常数0,char c=“Hello”;,char c6=“Hello”;,char c5=“Hello”;,错误的初始化,注:初始化时数组的长度应足够大,确保可以容纳所有字符和结束标志0,返回,char c8=H,e,l,l,o,0后面的6,7元素实际也被自动置为0。,1.输入单个字符 c

42、har c8;int i;cinc0c1c2;,for(i=0;i ci;,2.整个数组的输入输出,即按数组名输入输出(仅用于字符数组),因数组名本身代表数组的首地址,注意:(1)输入、输出字符串时不包括“”(2)cin输入时系统一直读取字符,直到遇“空格”,“Tab键”和“回车符”为止。例如:输入数据 hello world C数组中内容为hello(3)通过键盘输入的字符串不能使用转移字符。p139,四、字符数组的输入和输出,返回,四、字符数组的输入和输出,3.字符数组输出 使用”不仅可以直接输出字符数组中保存的字符串,而且能够直接输出一个字符串常量,即用双引号括起来的字符串。如:cout

43、“x+y=“x+yendl;,五、利用二维数组存储字符串,利用二维数组可以同时保存若干个字符串,最多能保存的字符串个数等于该数组的行下标数。例如:(1)char a74=“SUN”,”MON”,”TUE”,”WED”,”THU”,”FRI”,”SAT”;(2)char b78=“well”,”good”,”middle”,”pass”,”bad”;char b610=“int”,”double”,”char”;Char d1020=;,六、二维数组的输入输出,1、二维字符数组的输入 const int N=10;char wN30;for(int i=0;iwi;2、二维字符数组的输出 for

44、(i=N-1;i=0;i-)coutwiendl;,七、字符串函数,C+系统专门为处理字符串提供了一些预定义的的函数供编程者使用。这些函数的原型被保存在 string.h 头文件中。求字符串长度函数int strlen(const char s);返回实参字符串的长度。字符串拷贝函数char*strcpy(char*dest,const char*src);把src所指字符串拷贝到dest所指的存储空间,然后返回dest的值。,字符串连接函数char*strcat(char*dest,const char*src);把src所指字符串拷贝到dest所指字符串之后的存储空间中,然后返回dest的

45、值。字符串比较函数int strcmp(const char*s1,const char*s2);比较s1和s2的大小,返回1(s1s2),0(s1=s2),-1(s1s2)三者之一从字符串中查找字符函数char*strchr(const char*s,int c);从s所指的字符串中的第一个字符起顺序查找ASCII码为c的字符,若查找成功返回该字符的存储地址,否则返回NULL(即数值0),从字符串中逆序查找字符char*strrchr(const char*s,int c);从s所指的字符串中的最后一个字符起顺序查找ASCII码为c的字符,若查找成功返回该字符的存储地址,否则返回NULL从字

46、符串中查找子串char*strstr(const char*s1,const char*s2);从s1所指的字符串中第一个字符起,顺序向后查找出与s2所指字符串相同的字串,若查找成功则返回该字串的首地址,否则返回NULL,#include#include void main()char st130,st240,st370;int l1,l2,a;cinst1st2;/*INPUT*/l1=strlen(st1);/*strlen*/l2=strlen(st2);coutl1=l1tl2=l2n;a=strcmp(st1,st2);/*strcmp*/coutan;,if(a0)coutst2n

47、;else if(a=0)coutst1=st2n;else coutst1st2n;cout(strcat(st1,st2)n;/*strcat*/coutst1n;coutstrcpy(st3,st2)n;/*strcpy*/coutst3n;,例:字符串函数的使用,返回,例:字符串函数的使用,八、字符数组程序应用,字符串的长度,逆序,字符串函数,返回,例:求字符串长度(选学),扫描数组,只要不是0,计数器就加1,源程序:,#includevoid main()int i;char s50;cins;for(i=0;i50,i,for(i=0;i50,i,i=0,#include#incl

48、udevoid main()int i,j=0;char c10,t;cinc;int l=strlen(c);for(i=0,j=l-1;ij;i+,j-)t=ci;ci=cj;cj=t;cout字符串长度:l,逆序后的字符串:cn;,例:求出输入的字符串的长度,并将输出 的字符串中的字符逆序输出,源程序1:,#include iostream.hvoid main()int i,j;char s10,t;cins;for(i=0;i10,源程序2:,(选学),字符串函数,/*例:STRCAT*/,#includevoid main()int i,j;char s140,s250;cins1

49、s2;for(i=0;i40,s1,s2,s1,(选学),附录:弄清语句中的i和i+,/*例:STRCPY*/#include void main()char p180,p280;int i;cinp2;for(i=0;p2i!=0;i+)p1i=p2i;p1i=0;cout“p1=“p1“np2=“p2“n”;,(选学),#include void main()char p180,p280;int i;cinp1p2;for(i=0;p2i!=0,if(p1ip2i)coutp2n;else if(p1ip2i)coutp1p2n;elsecoutp1=p2n;,/*例:STRCMP*/,(

50、选学),例:输入10个同学的姓名,按升序排序(二维字符数组的应用),#include#include void main()char s1016,t16;int i,j,n=10;for(i=0;isi;for(i=0;in;i+)coutsi;coutn;,for(i=0;i0)strcpy(t,sj);strcpy(sj,sj+1);strcpy(sj+1,t);for(i=0;in;i+)coutsi;,冒泡法排序,字符串应用举例(例5-6-1(p144),编写一个程序,首先从键盘上输入一个字符串,接着输入一个字符,然后分别统计出字符串中大于、等于、小于该字符的个数。,字符串应用举例(例

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号