C++程序设计第07章-数组课件.pptx

上传人(卖家):三亚风情 文档编号:3514896 上传时间:2022-09-10 格式:PPTX 页数:88 大小:278.17KB
下载 相关 举报
C++程序设计第07章-数组课件.pptx_第1页
第1页 / 共88页
C++程序设计第07章-数组课件.pptx_第2页
第2页 / 共88页
C++程序设计第07章-数组课件.pptx_第3页
第3页 / 共88页
C++程序设计第07章-数组课件.pptx_第4页
第4页 / 共88页
C++程序设计第07章-数组课件.pptx_第5页
第5页 / 共88页
点击查看更多>>
资源描述

1、第7章 数组本章要点v了解数组了解数组v理解怎样定义数组以及怎样操纵数组中的数据理解怎样定义数组以及怎样操纵数组中的数据v理解理解“数组下标越界数组下标越界”的含义的含义v了解数组处理中的一些限制了解数组处理中的一些限制v了解怎样将数组作为参数传递给函数了解怎样将数组作为参数传递给函数v理解怎样使用字符串函数处理理解怎样使用字符串函数处理C-stringv了解怎样向了解怎样向C-string输入数据以及怎样从输入数据以及怎样从C-string输出数据输出数据v理解怎样操纵二维数组中的数据理解怎样操纵二维数组中的数据v了解多维数组了解多维数组问题的提出v统计某一地区每岁年龄的人数,以及总人数,假

2、统计某一地区每岁年龄的人数,以及总人数,假定不超过定不超过120岁。岁。v用用120个变量:个变量:int age1,age2,age3,.age119,age120程序age1=0;age2=0;cout age1endl;cout age2x;cout age1200)&(xx;程序结构庞大,机械重复,程序结构庞大,机械重复,于是引入数组于是引入数组数组(构造数据类型)v一维数组一维数组v二维数组二维数组v字符数组字符数组一维数组的定义 数组(整体)数组(整体)int a10;数组名数组名数组元素个数数组元素个数数组类型数组类型引用时不能超出下标引用时不能超出下标 最大值最大值引用下标下标

3、 int i=3,j=2,a10;引用引用 ai,ai+2,ai+j,a0,a1,a2,.a9数组是一个数组是一个整体整体概念,数组元素是概念,数组元素是个体个体概念,概念,此例:此例:每一个元素都是一个整数每一个元素都是一个整数注意:注意:下标从下标从0 09 9统计各年龄段的人数v问题:问题:统计某一地区每岁年龄的人数,以及总人统计某一地区每岁年龄的人数,以及总人数,假定不超过数,假定不超过120岁。岁。a0,a1,a2,.a1191 岁人数岁人数2 岁人数岁人数3 岁人数岁人数120 岁岁人人数数定义其他类型数组float b5;char c20;b0,b1,.b4c0,c1,.c19定

4、义定义引用引用数组初始化v在定义数组时赋初值在定义数组时赋初值int a3=1,3,5;float b2=3.14,5.18;char c5=a,b,c,d,e;亦可亦可 int a=1,2,3,4,5;编译系统自动确定元素个数编译系统自动确定元素个数 int b10=1,2;前两个元素的值为前两个元素的值为1、2,其他元素为,其他元素为0数组在内存中的存放在内存中占据:在内存中占据:一片连续的存储区一片连续的存储区例:例:int a20;VC+中,一个整型变量中,一个整型变量占用占用 4 个字节内存。个字节内存。.内存内存a0.a1a2a18a19注意vC+不允许在数组上进行整体操作不允许在

5、数组上进行整体操作F不能整体赋值不能整体赋值F不能比较不能比较F不能整体输入输出不能整体输入输出v赋值:赋值:for(i=0;i10;i+)yi=xi;v输入:输入:for(i=0;i yi;v输出:输出:for(i=0;i10;i+)cout=yi)一维数组应用v逆序逆序v数的分解数的分解v求求Fibonacci数列问题数列问题v排序排序v插入插入v查找(顺序、折半)查找(顺序、折半)v合并合并逆序输出 例7.1 v问题:问题:程序使程序使a0到到a9的值为的值为09,然后按,然后按逆序逆序输出。输出。v程序:程序:#include#include using namespace std;i

6、nt main()int i,a10;for(i=0;i=0;i-)coutsetw(4)ai;coutendl;return 0;运行结果如下:运行结果如下:9 8 7 6 5 4 3 2 1 0将一个数组中的数逆序后再放回原数组,如何做?求Fibonacci数列问题 例7.3 v问题:问题:用数组求用数组求Fibonacci数列的前数列的前20项和前项和前20项之和。项之和。v程序:程序:#include using namespace std;int main()int i,f20=1,1,sum=f0+f1;for(i=2;i20;i+)fi=fi-2+fi-1;sum+=fi;for

7、(i=0;i20;i+)if(i%5=0)coutn;coutfit;coutn前前20项和为:项和为:sumn;return 0;数的分解 例7.4 v问题:问题:将一个数分解到数组中,然后正向,将一个数分解到数组中,然后正向,反向输出。反向输出。v分解得到的各位数字放在数组分解得到的各位数字放在数组a中中F个位放在个位放在a0中中F十位放在十位放在a1中中F百位放在百位放在a2中中F数的分解#include using namespace std;int main()int i,j=0,k,a20;couti;k=i;while(k0)aj+=k%10;k=k/10;cout正向输出序列正

8、向输出序列:=0;k-)coutakt;coutendl;cout反向输出序列反向输出序列:endl;for(k=0;kj;k+)coutakt;coutm,则则 a 数组比数组比 b 数组大数组大如果如果 jbi 的次数的次数 k是是 ai=bi 的次数的次数m 是是 aiy)flag=1;else if(xy)flag=-1;else flag=0;return(flag);比较数组大小(续)#include using namespace std;int main()int large(int,int);int a10,b10,i,j=0,k=0,m=0,n;coutn;cout输入数组

9、输入数组a:n;for(i=0;iai;coutn;cout输入数组输入数组b:n;for(i=0;ibi;coutn;比较数组大小(续)for(i=0;i10;i+)if(large(ai,bi)=1)j=j+1;else if(large(ai,bi)=0)k=k+1;else m=m+1;cout ai大于大于bi的次数的次数 jendl;cout ai等于等于bi的次数的次数 kendl;cout ai小于小于bi的次数的次数 mm)cout数组数组 a 大于数组大于数组 bn;else if(jm)cout数组数组 a 小于数组小于数组 bn;else coutbi 的次数的次数 k

10、是是 ai=bi 的次数的次数m 是是 aibi 的次数的次数数组名作函数参数 例7.6 问题:问题:将数组元素逆向存放。将数组元素逆向存放。原:原:7 2 5 4 3 6 1 现:现:1 6 3 4 5 2 7#include using namespace std;#define N 7void reverse(int b,int n)int i,j,t;i=0;j=n-1;while(ij)t=bi;bi=bj;bj=t;i+;j-;int main()int aN=7,2,5,4,3,6,1,i;cout原始数组元素为原始数组元素为:endl;for(i=0;iN;i+)coutait

11、;coutn;inverse(a,N);cout逆序后的数组元素为逆序后的数组元素为:endl;for(i=0;iN;i+)coutait;coutn;return 0;将数组元素逆向存放(续)实参实参 a形参形参 b实参数组与形参数组元素共享存储单元实参数组与形参数组元素共享存储单元 a0 a1 a2 .a5 a6 .b0 b1 b2 .b5 b6i=0i ji+,j-j=6冒泡法(起泡法)排序 例7.7 用冒泡法对用冒泡法对6个数排序(由小到大)个数排序(由小到大)8,4,9,6,5,22,4,5,6,8,9目标目标冒泡法的思想是:冒泡法的思想是:顺序扫描数组元素,顺序扫描数组元素,将相邻

12、两个数进行比较,将小数调到前面将相邻两个数进行比较,将小数调到前面如果有如果有 n 个数,则要进行个数,则要进行 n-1次扫描。次扫描。在第在第 j 次扫描中,要进行次扫描中,要进行 n-j 次两两比较,次两两比较,两两比较时,第一个元素的下标从两两比较时,第一个元素的下标从 1 变化到变化到 n-j 冒泡法排序程序用冒泡法对用冒泡法对6个数排序(由小到大)个数排序(由小到大)#include using namespace std;#define N 6int main()int aN;int i,j,t;cout请输入请输入 N 个数个数:endl;for(i=0;iai;冒泡法排序程序b

13、ubble_sort(a,N);cout排好序的数为排好序的数为:endl;for(i=0;iN;i+)coutait;coutendl;return 0;冒泡法排序程序/排序程序的核心排序程序的核心 void bubble_sort(int a,int n)int i,j,t;for(i=0;in-1;i+)/i 控制扫描次数控制扫描次数 for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;冒泡法排序算法缺点:冒泡法排序算法缺点:经常交换经常交换执行效率低执行效率低?能否降低交换次数能否降低交换次数用选择法排序用选择法排序选择法排序选择法的思想是选择法的思想是:例例7.8(假

14、定假定6个元素存放在个元素存放在a0a5中)中)第一趟扫描,将第一趟扫描,将a0到到a5中最小数的下标找到,设中最小数的下标找到,设为为p,若若 p!=0,则则a0与与ap交换位置。交换位置。第二趟扫描,将第二趟扫描,将a1到到a5中最小数的下标找到,设中最小数的下标找到,设为为p,若若 p!=1,则则a1与与ap交换位置。交换位置。依此类推,共需依此类推,共需5次扫描,第次扫描,第i次扫描时(次扫描时(i=04)第一个元素的下标为第一个元素的下标为 i,最后一个元素的下标为最后一个元素的下标为5数组名作函数参数问题:问题:编写一个函数实现选择法排序。编写一个函数实现选择法排序。例例7.8#i

15、nclude using namespace std;void sort(int a10)int i,j,k,t;for(i=0;i9;i+)/选择法排序选择法排序k=i;for(j=i+1;j10;j+)if(ajak)k=j;if(k!=i)t=ak;ak=ai;ai=t;有无缺点没有通用性数组名作函数参数int main()int array10,i;cout请输入数组的元素请输入数组的元素:endl;for(i=0;iarrayi;sort(array);cout排好序的数组元素为排好序的数组元素为:endl;for(i=0;i10;i+)coutarrayit;coutendl;re

16、turn 0;内存工作区示意图 5 8 2 9 1 3 6 4 10 7arraya地址地址传递传递对前例的修改#include using namespace std;void sort(int a,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(ajak)k=j;if(k!=i)t=ak;ak=ai;ai=t;对前例的修改int main()int array100,i,n;cout请输入数组元素个数请输入数组元素个数:n;cout请输入数组的元素请输入数组的元素:endl;for(i=0;iarrayi;sort(arra

17、y,n);cout排好序的数组元素为排好序的数组元素为:endl;for(i=0;in;i+)coutarrayit;coutendl;选择法的另一种实现方法#include /li0708_1.cpp 选择法排序的变种选择法排序的变种using namespace std;#define N 6 void select_sort(int a,int n)int i,j,t;for(i=0;in-1;i+)/按升序排序按升序排序for(j=i;jaj)t=ai;ai=aj;aj=t;int main()int aN,i;cout请输入请输入6个数个数:endl;for(i=0;iai;sele

18、ct_sort(a,N);cout排好序的数为排好序的数为:endl;for(i=0;iN;i+)coutait;coutendl;return 0;插入例 例7.9 v问题:问题:已有一个排好序的数组,今输入一个数要已有一个排好序的数组,今输入一个数要求按原来排序规律将它插入数组中。求按原来排序规律将它插入数组中。v算法思想算法思想0 5 8 10 18 20如插入如插入21,直接插入到,直接插入到20右边右边如插入如插入6,则把,则把8及其后面的数据全部向右移动一及其后面的数据全部向右移动一个位置,把个位置,把6插在插在8的位置(找到该位置有两种方法:的位置(找到该位置有两种方法:自左向右

19、自左向右前插前插;自右向左;自右向左后插后插)后插排序void ba_ins_sort(int a,int n)/li0709.cpp 直接插入排序后插算法直接插入排序后插算法 int i,j,p;for(i=1;i=0&paj;j-)/将比将比p大的元素依次右移一个位置大的元素依次右移一个位置aj+1=aj;aj+1=p;筛选法求素数 例7.10 v问题:问题:用用筛选法筛选法求求1100之间所有素数,每行之间所有素数,每行输出输出5个素数。个素数。下标下标i从从198下标下标j从从i+199筛选法求素数#include using namespace std;#define N 100vo

20、id prime(int a,int n)int i,j;for(i=1;in-1;i+)/a0不是素数,因此从不是素数,因此从a1开始判断开始判断 for(j=i+1;jn;j+)if(ai!=0&aj!=0)if(aj%ai=0)aj=0;筛选法求素数int main()int aN,i,n;for(i=0;iN;i+)ai=i+1;/赋初值赋初值prime(a,N);cout1100内的素数为内的素数为:endl;for(i=1,n=0;iN;i+)if(ai!=0)coutait;n+;if(n%5=0)coutn;return 0;顺序查找 例7.11问题:问题:在一维数组在一维数组

21、a 中中查找查找 x 是否存在,若存在,是否存在,若存在,返回其下标,否则返回返回其下标,否则返回-1。6 3 18 24 9 32 6 46 1 12如查找如查找9 9顺序查找#include using namespace std;#define M 10int search(int a,int x,int n)int i;for(i=0;in;i+)if(x=ai)return i;return-1;顺序查找int main()int array=6,3,18,24,9,32,6,46,1,12,i,p,x;coutx;p=search(array,x,M);cout原始数组元素为原始数

22、组元素为:endl;for(i=0;iM;i+)coutarrayi=0)cout查找成功!数组元素的下标查找成功!数组元素的下标为为pendl;else cout未查找到!未查找到!up,则检索失败,算法结束,否则,则检索失败,算法结束,否则,转第三步;转第三步;F mid=(low+up)/2;F若若x=amid,则检索成功,算法结束,否则则检索成功,算法结束,否则转第五步;转第五步;Fxamid,则置则置up=mid-1,转第二步;转第二步;否则置否则置low=mid+1,转第二步;转第二步;折半查找程序#include using namespace std;#define M 10i

23、nt bi_search(int a,int x,int n)int low=0,mid,up=n-1;while(low=up)mid=(low+up)/2;if(x=amid)return mid;else if(xamid)up=mid-1;else low=mid+1;return-1;折半查找程序int main()int array=1,3,6,24,30,32,36,46,100,120,i,p,x;coutx;p=bi_search(array,x,M);cout原始数组元素为原始数组元素为:endl;for(i=0;iM;i+)coutarrayi=0)cout查找成功!数组

24、元素的下标查找成功!数组元素的下标为为pendl;else cout未查找到!未查找到!endl;return 0;求集合的交集 例7.13#include using namespace std;int search(int b,int x,int n)/例例7.11中的函数中的函数int i;for(i=0;in;i+)/顺序查找法顺序查找法if(x=bi)return i;return-1;int intersection(int a,int b,int c,int m,int n)int i,j,k=0;for(i=0;im;i+)if(j=search(b,ai,n)!=-1)/用数

25、组元素作为函数的实参用数组元素作为函数的实参 ck+=bj;return k;求集合的交集 例7.13int main()int a=4,8,2,1,9,10,b=2,5,3,9,7,c20,count,i;count=intersection(a,b,c,6,5);/用数组名作为函数的实参用数组名作为函数的实参cout数组数组a和数组和数组b的交集的交集:;for(i=0;icount;i+)coutcit;coutendl;cout数组数组a和数组和数组b交集中元素的个交集中元素的个数数:countendl;return 0;问题 课程课程1 1 课程课程2 2 课程课程3 3 学生学生1

26、 89 78 561 89 78 56学生学生2 88 99 100 2 88 99 100 学生学生3 72 80 613 72 80 61学生学生4 60 70 754 60 70 75二维表格二维表格求每门课程的平均成绩,一列的平均值求每门课程的平均成绩,一列的平均值求一个学生的平均成绩,一行的平均值求一个学生的平均成绩,一行的平均值 二维数组的定义 数组(整体)数组(整体)int a43;数组名数组名行数行数列数列数数组类型数组类型元素的引用int a43 代表代表12个个简单变量:简单变量:a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32行号从

27、行号从 0 开始,开始,列号也从列号也从 0 开始,开始,元素的引用问题:问题:课程课程1 课程课程2 课程课程3 学生学生1 89 78 56 学生学生2 88 99 100 学生学生3 72 80 61 学生学生4 60 70 75二维表格二维表格元素元素(个体个体)int a43 代表代表12个个简单变量简单变量 如如 a00、a12、a32 aij行下标行下标列下标列下标二维数组在内存中的存储v占据一片连续存储区占据一片连续存储区a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32按行存放按行存放第第0 行行a00a01a02a10a11a12第第

28、1 行行a30a31a32第第 3 行行.内存内存二维数组的初始化 int a43=1,2,3,4,5,6,7,8,9,10,11,12 ;四行三列四行三列 int a43=1,2,3,4,5,6,7,8,9,10,11,12;存储顺序存储顺序 int a43=1,4,7,10;给每一行的第给每一行的第1个元素赋值,其余为零个元素赋值,其余为零二维数组的初始化int a 4=1,2,3,4,5,6,7,8,9,10,11,12;第一维的长度可不指定第一维的长度可不指定第二维的长度不能省第二维的长度不能省二维数组的应用问题:问题:课程课程1 课程课程2 课程课程3 aver数组数组 学生学生1

29、89 78 56 aver0 学生学生2 88 99 100 aver1 学生学生3 72 80 61 aver2 学生学生4 60 70 75 aver3?求每个学生的平均成绩,即求各行的平均值求每个学生的平均成绩,即求各行的平均值程序主要部分int a43=.,aver4;int i,j;for(i=0;i4;i+)/*i 控制行数控制行数*/averi=0;for(j=0;j3;j+)averi+=aij;/*j 控制列数控制列数*/averi/=3;for(i=0;i4;i+)cout averi endl;上例解法二解解2:课程课程1 课程课程2 课程课程3 空空列列 学生学生1 8

30、9 78 56 a03 学生学生2 88 99 100 a13 学生学生3 72 80 61 a23 学生学生4 60 70 75 a33数组中多定义一列,让其初值为零,用来存放数组中多定义一列,让其初值为零,用来存放平均值。平均值。解法二程序片段 /*多定义一列多定义一列,存放平均值,存放平均值*/int a44 89,78,56,0.;int i,j;for(i=0;i4;i+)/*i 控制行数控制行数*/for(j=0;j3;j+)a i3+=aij;/*j 控制列数控制列数*/a i3 /=3;for(i=0;i4;i+)cout a i3 endl;二维数组名用作函数参数v数组元素作

31、函数参数数组元素作函数参数F与用变量做实参一样与用变量做实参一样单向值传递单向值传递v数组名作函数参数数组名作函数参数F实参与形参均用数组名实参与形参均用数组名F实参和形参可用指针(实参和形参可用指针(ch9介绍)介绍)二维数组元素作函数参数v问题:问题:有两个二维数组有两个二维数组a34和和b34,统统计两个数组中对应元素相等的个数。计两个数组中对应元素相等的个数。v算法:算法:F判断对应元素是否相等,等,则记数器加判断对应元素是否相等,等,则记数器加1 统计两个数组中对应元素相等的个数#include /二维数组元素作为函数参数二维数组元素作为函数参数using namespace std

32、;int main()int equal(int,int);int a34=1,2,3,4,5,6,7,8,9,10,11,12,b34=12,2,3,4,10,6,7,11,9,5,8,1,i,j,k=0;for(i=0;i3;i+)for(j=0;j4;j+)if(equal(aij,bij)=1)k+;cout两个数组中对应元素相等的个数为两个数组中对应元素相等的个数为:kendl;return 0;int equal(int x,int y)int flag;if(x=y)flag=1;else flag=0;return(flag);求矩阵中的最小值 例7.15v问题:问题:有一个有

33、一个34 的矩阵,要求编程求出其中值最的矩阵,要求编程求出其中值最小的元素,以及其所在的行号和列号。小的元素,以及其所在的行号和列号。v算法:算法:F假定数组中第假定数组中第0行第行第0列的元素最小列的元素最小F其他的元素与它比较,只要比它小,则将该值记下并记下其他的元素与它比较,只要比它小,则将该值记下并记下它所在的行和列的下标它所在的行和列的下标求矩阵中的最小值#include using namespace std;int min_element(int a 4,int&row,int&colum)int i,j,min;min=a00;for(i=0;i=2;i+)for(j=0;j=

34、3;j+)if(aijmin)min=aij;row=i;colum=j;return min;求矩阵中的最小值int main()int i,j,row=0,colum=0,min;int a34;cout请输入请输入3行行4列的二维数组列的二维数组:;for(i=0;i=2;i+)for(j=0;jaij;min=min_element(a,row,colum);cout最小值最小值=minendl;cout所在行号所在行号=row 所在列号所在列号=columendl;return 0;矩阵转置 例7.16v问题:问题:将一个二维数组行和列元素互换存到另一个将一个二维数组行和列元素互换存

35、到另一个二维数组中。二维数组中。(矩阵转置)(矩阵转置)v程序:程序:矩阵转置#include using namespace std;void transpose(int a3,int b3)for(int i=0;i3;i+)for(int j=0;j3;j+)bji=aij;int main()int a33=1,2,3,4,5,6,7,8,9;int b33,i,j;cout数组数组a:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutaijt;coutn;transpose(a,b);987654321矩阵转置cout数组数组 b:n;for(i=0;i3;i

36、+)for(j=0;j3;j+)coutbijt;coutn;return 0;问题:在一个矩阵中如何转置(对方阵而言)?对方阵的转置#include using namespace std;int main()int a33=.;int t,i,j;输出数组输出数组 a;for(i=0;i3;i+)for(j=i+1;j3;j+)/对右上三角形循环对右上三角形循环t=aij;aij=aji;aji=t;输出转置后的数组输出转置后的数组 a;return 0;987654321a对左下三角形元素循环,如何实现字符数组定义和引用v定义:定义:char c10;v引用:引用:c0,c1,c2,c9

37、 每个元素都是一个简单的字符变量每个元素都是一个简单的字符变量 ci=a;for(i=0;i ci;for(i=4;i=0;i-)cout 数组长度:出错初值个数数组长度:其余元素自动定为空字符即 0 初值个数=数组长度:定义时可省略数组长度字符串例:字符串常数例:字符串常数China,OK!占占6个字节个字节 占占4个字节个字节一般存放到一维字符数组中,一般存放到一维字符数组中,即用一维字符数组实现字符串。即用一维字符数组实现字符串。China00OK!.0 为字符串结尾标志为字符串结尾标志字符串的输入输出-逐个字符输入输出 将字符串存放到一维字符数组中将字符串存放到一维字符数组中 例:例:

38、char s110=C,h,i,n,a,0;简写为:简写为:char s110=China;再简写为:再简写为:char s110=China;只用字符数组的前六个字节空间只用字符数组的前六个字节空间输出一个三角形图形v演示例演示例7.20#include using namespace std;int main()char star5=,*,*,*,*,*,*;for(int i=0;i3;i+)for(int j=0;ji+3;j+)/输出空字符时,什么也不输出输出空字符时,什么也不输出cout starij;coutendl;return 0;字符串的输入输出(作为整体输入输出)v例例7

39、.21#include using namespace std;int main()char str120,str220;cout输入两个字符串:输入两个字符串:str1;cinstr2;cout字符串字符串1str1endl;cout字符串字符串2str2endl;return 0;输入输入China good演示结论v不能不能输入带空格的字符串输入带空格的字符串v使用使用 cin.getline()函数实现函数实现字符串输入字符串输入v例例7.22#include using namespace std;int main()char str180;char str24=G,o,o,d;co

40、ut请输入一行字符串:请输入一行字符串:endl;cin.getline(str1,80);/表示最多输入表示最多输入79个字符,系统个字符,系统自动在最后加一个自动在最后加一个0coutstr1=str1endl;coutstr2=str2endl;return 0;输入输入aaa bbb ccc字符串运算函数1.strlen(字符数组字符数组)求字符串长度求字符串长度(STRing LENgth)例:例:char s110=ABCD;char s210=12 n;char s310=An0121;int x,y,z,i;x=strlen(s1);y=strlen(s2);z=strlen(

41、s3);i=strlen(XYZ0ABC);x=4y=4z=7 i=3sizeof(s1)sizeof(s2)sizeof(s3)结果均为结果均为10字符串运算函数2.strcat(字符数组字符数组1,字符数组字符数组2)连接两个字符串连接两个字符串(STRing conCATenate),将将 字符数组字符数组2 的内容连接到的内容连接到 字符数组字符数组1 之后。之后。例:例:char s110=AB,s210=CD;strcat(s1,s2);couts1;couts2;strcat(s1,EF);couts1;输出输出 ABCD输出输出 CD输出输出 ABCDEF注意此时注意此时s1的

42、空间的空间应定义得足够大。应定义得足够大。字符串运算函数3.strcpy(字符数组字符数组1,字符数组字符数组2)字符串复制字符串复制(STRing CoPY)将字符串将字符串2 的值复制到字符数组的值复制到字符数组1中中例:例:char s110,s210;strcpy(s1,ABCD);strcpy(s2,XYZ);strcpy(s1,s2);couts1;cout1字符串字符串2,2,函数值为一正数函数值为一正数字符串字符串11字符串字符串2,2,函数值为一负数函数值为一负数对两个字符串比较对两个字符串比较不能用不能用str1=str2其他一些字符串运算函数8.strncpy(字符数组字

43、符数组1,字符数组字符数组2,len)功能:功能:将字符串将字符串2 的前的前 len 个字符,个字符,拷入字符数组拷入字符数组15.strlwr(字符数组字符数组)/(STRing LoWeRcase)功能:功能:将字符串中字符全部将字符串中字符全部转换成小写转换成小写。6.strupr(字符数组字符数组)/(STRing UPpeRcase)功能:功能:将字符串中字符全部将字符串中字符全部转换成大写转换成大写。7.strncmp(字符数组字符数组1,字符数组字符数组2,len)功能:功能:比较前比较前 len 个字符个字符注意:注意:其他字符串运算函数,其他字符串运算函数,请查阅库函数表。

44、请查阅库函数表。二维字符数组一篇文章或一个编辑屏幕,看成一个二维数组。一篇文章或一个编辑屏幕,看成一个二维数组。将每行看成一个一维数组(字符串),将每行看成一个一维数组(字符串),则定义二维字符数组如下:则定义二维字符数组如下:char a34=*,*,*;char b36=Wang,Li,Cheng;注意:注意:多定义一列用于存放多定义一列用于存放0例例 *三行三列三行三列例例 WangWang Li Li Cheng Cheng三行五列三行五列二维字符数组char a34=*,*,*;char b36=Wang,Li,Cheng;*WangLiCheng可按行访问:可按行访问:a0 表示表

45、示 *a1 表示表示*a2 表示表示 *couta0endl;couta1endl;couta2endl;亦可访问某个字符:亦可访问某个字符:b10 表示表示 L b22 表示表示 e实现strcpy功能 例7.24#include using namespace std;int main()void my_strcpy(char ,char );char s180,s280;cout请输入一个字符串请输入一个字符串:endl;cin.getline(s2,80);my_strcpy(s1,s2);cout拷贝后的两个字符串分别为拷贝后的两个字符串分别为:endl;couts1endl;cou

46、ts2endl;return 0;void my_strcpy(char s1,char s2)int i=0,j=0;while(s2j!=0)s1i+=s2j+;s1i=0;统计字符串中有多少个单词 例7.25v问题:问题:统计字符串中有多少个单词,单词之间用空统计字符串中有多少个单词,单词之间用空格分隔开。格分隔开。统计字符串中的单词数另一法int numwords(char string)int i,j,num=0;for(i=0,j=strlen(string);ij;)while(stringi=)i+;/跳过空格字符跳过空格字符if(ij)num+;/单词数加单词数加1while

47、(stringi!=)i+;/跳过一个单词跳过一个单词return num;aaa bbb ccc 寻找最小字符串 例7.26v问题:问题:有三个字符串,要求找出其中最小者。有三个字符串,要求找出其中最小者。v分析:分析:根据根据ASCII码进行比较码进行比较#include#include using namespace std;int main()char string80;char str380;cout请输入三个字符串:请输入三个字符串:n;for(int i=0;i3;i+)cin.getline(stri,80);if(strcmp(str0,str1)0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);cout最小的字符串为:最小的字符串为:stringendl;return 0;

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C++程序设计第07章-数组课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|