《数组和字符串.ppt》由会员分享,可在线阅读,更多相关《数组和字符串.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数组和字符串现在学习的是第1页,共47页 第第0列列 第第1列列 第第2列列第第0行行第第1行行a00a01a02a10a11a122.数组元素数组元素数组的成员,用数组名加下标表示数组的成员,用数组名加下标表示。a0a1a2a3a4a5a6a7a8a95.1数组的概念数组的概念 数组是同类型变量的集合。数组具有如下特征:类型 数组的类型就是所有数组元素的数据类型;数组名 各元素共用同一个名称;维数 一维数组有一个下标,二维数组有两个下标。1.数组数组现在学习的是第2页,共47页 维界只能是整常数表达式(含符号常数);维界只能是整常数表达式(含符号常数);数组的下标从数组的下标从0 0开始;开
2、始;多个相同类型的数组可以在一个语句中定义。多个相同类型的数组可以在一个语句中定义。数据类型数据类型数组名数组名维界维界1.数组的定义数组的定义存储类型存储类型数据类型数据类型数组名数组名expnexpn-1exp2exp1intdata10;/一维数组一维数组floata34;/二维数组二维数组charstr130;/一维字符型数组一维字符型数组charstr21080;/二维字符型数组二维字符型数组5.2数组的定义和初始化数组的定义和初始化现在学习的是第3页,共47页2.数组的存储结构数组的存储结构 数组占用一片连续的存储单元,数组中的各个元素依次存放。数组名就是这一片存储单元的首地址。一
3、维数组:各个元素顺序存放。二维数组:先按行的顺序,然后按列的顺序依次存放各个元素。每个元素占用存储单元的多少,取决于数组的数据类型,同一个数组的各个元素占用相同数量的存储单元。字符型数组:各个字符依次存放,每个字符占1字节。现在学习的是第4页,共47页a0a0a1a1a2a2a3a3a4a4a5a5a6a6a7a7b00b00b01b01b02b02b10b10b11b11b12b12c00c00c01c01c06c06c10c10c11c11c16c16【例】【例】inta8;floatb23;charc27;现在学习的是第5页,共47页(1 1)一维数组初始化)一维数组初始化)一维数组初始
4、化)一维数组初始化 把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。把初值顺序放在等号右边的花括号中,各常量之间用逗号隔开。intata10=50,60,70,80,90,100,101,102,103,104;intata10=50,60,70,80,90,100,101,102,103,104;floattable5=1,2.5,3.6,4.7,5;floattable5=1,2.5,3.6,4.7,5;(2 2)二维数组初始化)二维数组初始化)二维数组初始化)二维数组初
5、始化把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内把全部初值放在一对花括号中,每一行的初值又分别放在一对内嵌的花括号中。嵌的花括号中。嵌的花括号中。嵌的花括号中。inta43=1,2,3,4,5,6,7,8,9,10,11,12;inta43=1,2,3,4,5,6,7,8,9,10,11,12;其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接写成其中代表每一行的内层花括号也可以省略,直接
6、写成inta43=1,2,3,4,5,6,7,8,9,10,11,12;inta43=1,2,3,4,5,6,7,8,9,10,11,12;3.3.数组的初始化数组的初始化现在学习的是第6页,共47页对数组初始化的几点说明对数组初始化的几点说明:如果赋初值的花括号中的常数个数如果赋初值的花括号中的常数个数少于少于数组元素个数,则编译程序会自动数组元素个数,则编译程序会自动以零来补足。以零来补足。intx6=1,2,3,4;相当于相当于intx6=1,2,3,4,0,0;inta43=1,2,4,5;相当于相当于inta43=1,2,0,4,5,0,0,0,0,0,0,0;花括号中的初值可以缺省
7、,但花括号中的初值可以缺省,但逗号不能省略逗号不能省略,缺省的值将被视为,缺省的值将被视为0。floatarray5=,2.5,3.5,;相当于相当于floatarray5=0,2.5,0,3.5,0;当花括号中给出初值的个数多于定义的数组元素个数时,将出错。当花括号中给出初值的个数多于定义的数组元素个数时,将出错。inta4=1,2,3,4,5;编译时会显示错误信息。编译时会显示错误信息。现在学习的是第7页,共47页用字符常数初始化用字符常数初始化charstr12=T,h,e,s,t,r,i,n,g,.,0;charlanguage58=B,A,S,I,C,0,F,O,R,T,R,A,N,
8、0,P,A,S,C,A,L,0,C,0,C,O,B,O,L,0;直接用字符串常量初始化直接用字符串常量初始化charstr12=Thestring.;或或charstr12=Thestring.;charLanguage58=BASIC,FORTRAN,PASCAL,C,COBOL;(3 3 3 3)字符型数组的初始化)字符型数组的初始化)字符型数组的初始化)字符型数组的初始化现在学习的是第8页,共47页 C C语言允许通过初始化方式隐含规定数组的大小。语言允许通过初始化方式隐含规定数组的大小。inta=0,1,2,3,4,5,0;等价于等价于inta7=0,1,2,3,4,5,0;用初始化方
9、法隐含规定多维数组的大小时,只能省略最左用初始化方法隐含规定多维数组的大小时,只能省略最左边的维界表达式。边的维界表达式。例如对二维数组,只能省略第一个方括号中的表达式,写成:例如对二维数组,只能省略第一个方括号中的表达式,写成:inta3=1,2,3,4,5,6,7;等价于等价于inta43=1,2,3,4,5,6,7;不能写成:不能写成:inta4=1,2,3,4,5,6,7;或或inta=1,2,3,4,5,6,7;4.利用初始化隐含规定数组的大小利用初始化隐含规定数组的大小现在学习的是第9页,共47页 用初始化方法隐含规定字符型数组的大小,可以免除乏用初始化方法隐含规定字符型数组的大小
10、,可以免除乏味的统计字符个数的工作。味的统计字符个数的工作。例如例如charstr=T,h,e,s,t,r,i,n,g,.,0;charstr=Thestring.;编译系统会根据初值给出的字符个数自动确定其维界是编译系统会根据初值给出的字符个数自动确定其维界是12。charlanguage8=BASIC,FORTRAN,PASCAL,C,COBOL;编译系统会根据初始化中字符串常量的个数自动确定该数组的第二维编译系统会根据初始化中字符串常量的个数自动确定该数组的第二维维界是维界是5。4.利用初始化隐含规定数组的大小利用初始化隐含规定数组的大小现在学习的是第10页,共47页5.3数组的基本操作
11、数组的基本操作 (1 1)用)用“数组名数组名 下标表达式下标表达式”的形式来引用一维数组元素。下标的的形式来引用一维数组元素。下标的下限下限是是0 0,而,而上限不能超过该数组定义时的维界值减上限不能超过该数组定义时的维界值减1 1。(2 2)用)用“数组名数组名 下标表达式下标表达式11下标表达式下标表达式2”2”的形式来引用二维的形式来引用二维数组元素,数组元素,“下标表达式下标表达式1”1”表示行下标,表示行下标,“下标表达式下标表达式2”2”表示列下标。表示列下标。(3 3)可以用与上面类似的形式来引用一维或二维字符型数组的元素,即字)可以用与上面类似的形式来引用一维或二维字符型数组
12、的元素,即字符串中的一个字符。符串中的一个字符。数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的数组的基本操作包括数组元素的引用、数组的赋值、数组的输入输出等。输入输出等。输入输出等。输入输出等。1 1 1 1数组元素的引用数组元素的引用现在学习的是第11页,共47页 只能逐个对数组元素赋值,不能直接对数组名赋值。只能逐个对数组元素赋值,不能直接对数组名赋值。inti,a5;a0=100,a1=120,a2=200,a3=250,a4=500;如果所赋的值有某种规律,就可以借助于循环来简
13、化程序的如果所赋的值有某种规律,就可以借助于循环来简化程序的编制。编制。intb23,i,j;for(i=0;i2;i+)for(j=0;j3;j+)bij=i+j;2.数组的赋值现在学习的是第12页,共47页 对字符型数组,只能对每个元素用字符常量赋值。对字符型数组,只能对每个元素用字符常量赋值。charst4;st0=A;st1=B;st2=C,st3=0;为了解决直接用字符串对字符型数组赋值的问题,可用为了解决直接用字符串对字符型数组赋值的问题,可用字符串处理字符串处理函数函数实现。实现。#includestrcpy(st,”ABC”);2.数组的赋值现在学习的是第13页,共47页 一维
14、数组,一般用单重循环实现对各个元素逐个输入和一维数组,一般用单重循环实现对各个元素逐个输入和输出。输出。floatx10;inti;for(i=0;i10;i+)scanf(%f,&xi);for(i=0;i10;i+)printf(%f,xi);3.3.数组的输入和输出现在学习的是第14页,共47页按行的顺序输入按行的顺序输入inta34,i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);按列的顺序输入按列的顺序输入inta34,i,j;for(j=0;j4;j+)for(i=0;i3;i+)scanf(“%d”,&aij);按矩阵形式输出按矩阵形
15、式输出#includevoidmain()inti,j;inta34=1,3,5,7,9,2,4,6,8,10,12,11;for(i=0;i3;i+)for(j=0;j4;j+)printf(%d,aij);printf(n);二维数组的输入输出用二重循环实现。二维数组的输入输出用二重循环实现。现在学习的是第15页,共47页【例】【例】将将1010个元素的整形数组个元素的整形数组a a分两行输出,每行分两行输出,每行5 5个数个数。#includevoidmain()inti,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%2d,ai);if(
16、i%5=4|i=9)printf(n);程序中的程序中的if语句可以改用条件表达式:语句可以改用条件表达式:#includevoidmain()inti,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%2d%c,ai,i%5=4|i=9?n:);现在学习的是第16页,共47页 字符型数组的输入和输出字符型数组的输入和输出 用用“%s”“%s”控制控制scanf()scanf()和和printf()printf()输入和输出字符串。输入和输出字符串。#includevoidmain()inti;charch10;for(i=0;i9;i+)scan
17、f(%c,&chi);for(i=0;chi!=0;i+)printf(%c,chi);#includevoidmain()charch10;scanf(%s,ch);printf(%s,ch);输出有异常字符?输出有异常字符?可以超出数组长度?可以超出数组长度?现在学习的是第17页,共47页 用gets()和puts()实现。用gets()接收字符串的显著特点是遇到回车键才认为输入结束。gets(字符型数组名);puts(字符型数组名);【例】【例】英文句子的输入输出。英文句子的输入输出。#includevoidmain()charword80;printf(Inputastatement:
18、);gets(word);puts(word);现在学习的是第18页,共47页【例】【例】二维字符型数组的输入和输出。二维字符型数组的输入和输出。#includevoidmain()inti;charcountry38;printf(请输入国家名称请输入国家名称:);for(i=0;i3;i+)gets(countryi);for(i=0;i3;i+)puts(countryi);现在学习的是第19页,共47页【例】统计某班某门课考试成绩各分数档人数。【例】统计某班某门课考试成绩各分数档人数。5.4数组的应用数组的应用1 1数据统计#includevoidmain()inta11=0,i;fl
19、oatx;for(i=1;i=30;i+)scanf(%f,&x);a(int)x/10+=1;/存放各分数档人数存放各分数档人数printf(0-910-1020-2930-3940-4950-5960-6970-7980-8990-99100n);for(i=0;i11;i+)printf(%3d,ai);现在学习的是第20页,共47页【例】试编程找出二维数组【例】试编程找出二维数组a34a34中最大和最小的元素,并指出它们中最大和最小的元素,并指出它们所在的行号和列号。所在的行号和列号。#includemain()inta45,i,j,max,max_row,max_col;intmin
20、,min_row,min_col;printf(输入二维数组如下:输入二维数组如下:n);for(i=0;i4;i+)for(j=0;j5;j+)scanf(%d,&aij);max=a00;max_row=0;max_col=0;min=a00;min_row=0;min_col=0;for(i=0;i4;i+)for(j=0;j5;j+)if(maxaij)min=aij,min_row=i,min_col=j;printf(输出结果如下:输出结果如下:n);printf(max=%d,row=%d,column=%dn,max,max_row,max_col);printf(min=%d
21、,row=%d,column=%dn,min,min_row,min_col);输入数据输入数据max=a00,row1=0,column1=0min=a00,row2=0,column2=0输出结果输出结果maxaijmax=aij,row1=i,column1=jmin=aij,row2=i,column2=j现在学习的是第21页,共47页【例】【例】数据统计中经常用到标准差的概念。假设有数据统计中经常用到标准差的概念。假设有n n个数个数d di i(i=1(i=1n)n),标准差的计算公式为:,标准差的计算公式为:计算计算di之和之和计算平均值计算平均值dd计算计算(di-dd)2之和
22、之和计算标准差计算标准差现在学习的是第22页,共47页#include#include#define N 1000main()int i,n;float dN,dd,s;scanf(%d,&n);/*输入数据个数输入数据个数*/for(i=0;in;i+)/*输入各个输入各个di*/scanf(%f,&di);dd=0;/*计算平均值计算平均值*/for(i=0;in;i+)dd+=di;dd/=n;/*平均值平均值*/s=0;/*计算标准差计算标准差*/for(i=0;in;i+)s+=(di-dd)*(di-dd);s=sqrt(s/(n-1);/*标准差标准差*/printf(s=%f,
23、s);现在学习的是第23页,共47页选择排序的基本思路:选择排序的基本思路:若有若有n n个数需要排序,则需要进行个数需要排序,则需要进行n-1n-1轮排序;轮排序;第第1 1轮有轮有n n个数参加排序,此后,每一轮参加排序的数据个数逐个数参加排序,此后,每一轮参加排序的数据个数逐次减少,即第次减少,即第2 2轮有后轮有后n-1n-1个,第个,第n-1n-1轮只剩下后轮只剩下后2 2个;个;在第在第i i轮排序时,要将轮排序时,要将aiai与其后的各个数进行比较,凡出现比与其后的各个数进行比较,凡出现比aiai小小的数就记下它的位置的数就记下它的位置j j,这一轮结束后,将,这一轮结束后,将a
24、iai与与ajaj交换位置,从而找到第交换位置,从而找到第i i小的元素。小的元素。【例】【例】选择排序。假设有选择排序。假设有1010个数,要求将它们按从小到大的顺序个数,要求将它们按从小到大的顺序排列。排列。2 2排序排序排序是将一批杂乱无序的数据按从小到大或从大到小的顺序整齐排排序是将一批杂乱无序的数据按从小到大或从大到小的顺序整齐排列。排序的主要操作是比较和交换。列。排序的主要操作是比较和交换。现在学习的是第24页,共47页#include#include#defineN10#defineN10main()main()inti,j,k,m;inti,j,k,m;intaN,t;inta
25、N,t;for(i=0;iN;i+)for(i=0;iN;i+)/*/*该循环用于输入数组元素的值该循环用于输入数组元素的值该循环用于输入数组元素的值该循环用于输入数组元素的值*/*/scanf(%d,&ai);scanf(%d,&ai);printf(printf(原始数据序列:原始数据序列:原始数据序列:原始数据序列:););for(i=0;iN;i+)for(i=0;iN;i+)/*/*该循环用于输出数组的初始序列该循环用于输出数组的初始序列该循环用于输出数组的初始序列该循环用于输出数组的初始序列*/*/printf(%4d,ai);printf(%4d,ai);for(i=0;iN-1
26、;i+)for(i=0;iN-1;i+)/*/*外循环,用于控制比较的轮数外循环,用于控制比较的轮数外循环,用于控制比较的轮数外循环,用于控制比较的轮数*/*/k=i;k=i;for(j=i+1;jN;j+)for(j=i+1;jN;j+)/*/*内循环,用于控制每轮比较的次数内循环,用于控制每轮比较的次数内循环,用于控制每轮比较的次数内循环,用于控制每轮比较的次数*/*/if(ajak)if(ajak)k=j;k=j;/*/*存储比存储比存储比存储比aiai小的元素的位置小的元素的位置小的元素的位置小的元素的位置*/*/if(i!=k)if(i!=k)/*/*必要时进行交换必要时进行交换必要
27、时进行交换必要时进行交换*/*/t=ai;ai=ak;ak=t;t=ai;ai=ak;ak=t;printf(nprintf(n第第第第%d%d轮数据序列:轮数据序列:轮数据序列:轮数据序列:,i+1);,i+1);for(m=0;mN;m+)for(m=0;mN;m+)/*/*该循环用于输出每轮的排序结果该循环用于输出每轮的排序结果该循环用于输出每轮的排序结果该循环用于输出每轮的排序结果*/*/printf(%4d,am);printf(%4d,am);printf(nprintf(n最终有序数列:最终有序数列:最终有序数列:最终有序数列:););for(i=0;iN;i+)for(i=0;
28、iN;i+)/*/*该循环用于输出最终排序结果该循环用于输出最终排序结果该循环用于输出最终排序结果该循环用于输出最终排序结果*/*/printf(%4d,ai);printf(%4d,ai);printf(n);printf(n);现在学习的是第25页,共47页经过经过9轮比较和交换后,整个数组即变成有序。轮比较和交换后,整个数组即变成有序。选择排序总共要进行选择排序总共要进行(n-1)+(n-2)+.+1=n(n-1)/2次比较次比较和和最多最多n-1次交换次交换,是一种比较简单但效率较低的排序方法。,是一种比较简单但效率较低的排序方法。现在学习的是第26页,共47页冒泡排序的基本思路:冒泡
29、排序的基本思路:若有若有n n个数需要排序,则需要进行个数需要排序,则需要进行n-1n-1轮排序;轮排序;第第1 1轮参加排序的数有轮参加排序的数有n n个,此后,每一轮参加排序的数据个数逐次个,此后,每一轮参加排序的数据个数逐次减少,即第减少,即第2 2轮有前轮有前n-1n-1个,第个,第n-1n-1轮只剩下前轮只剩下前2 2个;个;每一轮排序,都是进行相邻两个数的比较,即每一轮排序,都是进行相邻两个数的比较,即a0a0与与a1a1,a1a1与与a2a2比比较,当不满足规定的顺序时就进行交换。该轮排序结束时,大数沉底,小数上较,当不满足规定的顺序时就进行交换。该轮排序结束时,大数沉底,小数上
30、浮一个位置,就像气泡一样。浮一个位置,就像气泡一样。【例】【例】【例】【例】冒泡排序。要求将保存在数组冒泡排序。要求将保存在数组冒泡排序。要求将保存在数组冒泡排序。要求将保存在数组a10a10a10a10中的数按从小到大的顺中的数按从小到大的顺中的数按从小到大的顺中的数按从小到大的顺序排序。序排序。序排序。序排序。现在学习的是第27页,共47页#include#define N 10 void main()int i,j,aN,t;printf(输入数据:);for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)for(j=0;jaj+1)/若为逆序,则相互交
31、换若为逆序,则相互交换若为逆序,则相互交换若为逆序,则相互交换 t=aj,aj=aj+1,aj+1=t;/逗号表达式,实现数据的交换逗号表达式,实现数据的交换逗号表达式,实现数据的交换逗号表达式,实现数据的交换 printf(输出结果:);for(i=0;iN;i+)printf(%-4d,ai);现在学习的是第28页,共47页 在处理大量数据时,经常要按某种方法找出所需的数据,在处理大量数据时,经常要按某种方法找出所需的数据,这个过程称为检索或查找。常用的检索方法有顺序检索、二分这个过程称为检索或查找。常用的检索方法有顺序检索、二分检索、菲波那契检索、跳步检索等。当要检索的数据已经大小检索、
32、菲波那契检索、跳步检索等。当要检索的数据已经大小有序时,采用二分检索的搜索次数最多为有序时,采用二分检索的搜索次数最多为loglog2 2n n次(其中次(其中n n是数据是数据总个数),是一种比较快的检索方法。总个数),是一种比较快的检索方法。3 3数据检索数据检索现在学习的是第29页,共47页顺序检索:顺序检索:不要求数据有序不要求数据有序。依次审查。依次审查数组中的数据是否要查找的数据,若是,数组中的数据是否要查找的数据,若是,结束审查;否则,继续审查。平均查找结束审查;否则,继续审查。平均查找次数为(次数为(n+1)/2n+1)/2。二分检索:二分检索:要求数据有序要求数据有序。开始时
33、将。开始时将整个数组作为搜索区间,审查位于中整个数组作为搜索区间,审查位于中间位置的元素是否要查找的数据,若间位置的元素是否要查找的数据,若否,则将查找区间折半,通过不断折否,则将查找区间折半,通过不断折半,直到找到或可确定数组中已没有半,直到找到或可确定数组中已没有指定的数据为止。指定的数据为止。(n+1)/2log2n【例】二分检索(对分检索、折半检索)。假设有【例】二分检索(对分检索、折半检索)。假设有n n个从小到大排序个从小到大排序好了的数,存放在数组好了的数,存放在数组v v中,要求用二分检索的方法查找指定的数中,要求用二分检索的方法查找指定的数x x是否在该数组中。是否在该数组中
34、。现在学习的是第30页,共47页#include#include#defineN20#defineN20main()main()intvN,x,low,high,mid,i;intvN,x,low,high,mid,i;printf(Enterdatabeingsorted:n);printf(Enterdatabeingsorted:n);for(i=0;iN;i+)for(i=0;iN;i+)/*/*输入原始有序数据存入数组输入原始有序数据存入数组输入原始有序数据存入数组输入原始有序数据存入数组v v中中中中*/*/scanf(%d,&vi);scanf(%d,&vi);printf(En
35、ternumbertobesearched:n);printf(Enternumbertobesearched:n);scanf(%d,&x);scanf(%d,&x);/*/*输入待查找的数据,存入输入待查找的数据,存入输入待查找的数据,存入输入待查找的数据,存入x x中中中中*/*/low=0;low=0;high=N-1;high=N-1;mid=(low+high)/2;mid=(low+high)/2;while(lowhigh&x!=vmid)while(lowhigh&x!=vmid)/*/*该循环用于缩小查找区间该循环用于缩小查找区间该循环用于缩小查找区间该循环用于缩小查找区间
36、*/*/if(xvmid)if(xvmid)high=mid-1;high=mid-1;elseelselow=mid+1;low=mid+1;mid=(low+high)/2;mid=(low+high)/2;if(x=vmid)if(x=vmid)/*/*判断查找成功与否判断查找成功与否判断查找成功与否判断查找成功与否*/*/printf(%disatposition%d.ofarray.n,x,mid);printf(%disatposition%d.ofarray.n,x,mid);elseelseprintf(%disnotinarray.n,x);printf(%disnotina
37、rray.n,x);现在学习的是第31页,共47页CC语言本身不提供字符串处理的能力,但是,语言本身不提供字符串处理的能力,但是,语言本身不提供字符串处理的能力,但是,语言本身不提供字符串处理的能力,但是,C C编译系统提供了大量编译系统提供了大量编译系统提供了大量编译系统提供了大量的字符串处理库函数,它们定义在标题文件的字符串处理库函数,它们定义在标题文件的字符串处理库函数,它们定义在标题文件的字符串处理库函数,它们定义在标题文件string.hstring.h中,使用时只要包含中,使用时只要包含中,使用时只要包含中,使用时只要包含这个标题文件,就可以使用其中的字符串处理函数。这个标题文件,
38、就可以使用其中的字符串处理函数。这个标题文件,就可以使用其中的字符串处理函数。这个标题文件,就可以使用其中的字符串处理函数。5.4.2 字符串处理函数和字符串的应用1字符串处理函数(1 1)求字符串长度函数)求字符串长度函数)求字符串长度函数)求字符串长度函数strlen()strlen()该函数用来计算字符串的长度,即所给字符串中包含的字符个数该函数用来计算字符串的长度,即所给字符串中包含的字符个数该函数用来计算字符串的长度,即所给字符串中包含的字符个数该函数用来计算字符串的长度,即所给字符串中包含的字符个数(不计字符串末尾的(不计字符串末尾的(不计字符串末尾的(不计字符串末尾的“0”“0”
39、字符),其调用格式为字符),其调用格式为字符),其调用格式为字符),其调用格式为strlen(strlen(字符串字符串字符串字符串););其中,函数的参数可以是字符型数组名或字符串常数,函数的返其中,函数的参数可以是字符型数组名或字符串常数,函数的返其中,函数的参数可以是字符型数组名或字符串常数,函数的返其中,函数的参数可以是字符型数组名或字符串常数,函数的返回值是字符串长度。回值是字符串长度。回值是字符串长度。回值是字符串长度。现在学习的是第32页,共47页【例】【例】用用strlen函数测试给定字符串的长度。函数测试给定字符串的长度。#include#includevoidmain()c
40、hars=abn012;printf(%d,strlen(s);s3=0;printf(%dn,strlen(s);程序运行后,输出结果为:程序运行后,输出结果为:注意:注意:字符串字符串abn012中除含有两个普通字符中除含有两个普通字符a和和b外,还含有四个转义字符,分别外,还含有四个转义字符,分别是是n、012、和和,且字符串末尾的且字符串末尾的0不计入字符不计入字符串长度之内,因此,该字符串的串长度之内,因此,该字符串的长度是长度是6。在在C语言中,语言中,0、0和和NULL是等价的,都表示是等价的,都表示0字符。经过字符。经过s3=0赋值赋值后,数组后,数组s中存放的是中存放的是“a
41、bn0”。现在学习的是第33页,共47页【例】【例】字符串拷贝函数的使用示例。字符串拷贝函数的使用示例。#include#includevoidmain()charstr24;strcpy(str0,you);strcpy(str1,me);printf(%s%sn,str0,str1);str03=&;printf(%s%sn,str0,str1);该函数用来将源字符串拷贝到目标字符串中,它的调用格式为该函数用来将源字符串拷贝到目标字符串中,它的调用格式为该函数用来将源字符串拷贝到目标字符串中,它的调用格式为该函数用来将源字符串拷贝到目标字符串中,它的调用格式为strcpy(string1,
42、string2);strcpy(string1,string2);其中,其中,其中,其中,string1string1(目标)必须是字符型数组名,(目标)必须是字符型数组名,(目标)必须是字符型数组名,(目标)必须是字符型数组名,string2string2(源)可以是字符型数(源)可以是字符型数(源)可以是字符型数(源)可以是字符型数组名或字符串常数;函数返回值是目标字符串。组名或字符串常数;函数返回值是目标字符串。组名或字符串常数;函数返回值是目标字符串。组名或字符串常数;函数返回值是目标字符串。(2 2 2 2)字符串拷贝函数)字符串拷贝函数)字符串拷贝函数)字符串拷贝函数strcpy(
43、)strcpy()strcpy()strcpy()现在学习的是第34页,共47页 该函数用来对两个字符串进行比较,确定其大小,它的调用格该函数用来对两个字符串进行比较,确定其大小,它的调用格该函数用来对两个字符串进行比较,确定其大小,它的调用格该函数用来对两个字符串进行比较,确定其大小,它的调用格式为式为式为式为strcmp(strcmp(字符串字符串字符串字符串1,1,字符串字符串字符串字符串2);2);其中,字符串其中,字符串其中,字符串其中,字符串1 1和字符串和字符串和字符串和字符串2 2可以是字符型数组名或字符串常数。可以是字符型数组名或字符串常数。可以是字符型数组名或字符串常数。可
44、以是字符型数组名或字符串常数。字符串比较的方法是:依次对字符串字符串比较的方法是:依次对字符串字符串比较的方法是:依次对字符串字符串比较的方法是:依次对字符串1 1 1 1和字符串和字符串和字符串和字符串2 2 2 2对应位置上的字符对应位置上的字符对应位置上的字符对应位置上的字符逐对进行比较,当出现第一对不相同的字符时,就以这一对字符逐对进行比较,当出现第一对不相同的字符时,就以这一对字符逐对进行比较,当出现第一对不相同的字符时,就以这一对字符逐对进行比较,当出现第一对不相同的字符时,就以这一对字符ASCIIASCIIASCIIASCII代码值的大小决定这两个字符串的大小。比较的结果作为函数
45、值返回:代码值的大小决定这两个字符串的大小。比较的结果作为函数值返回:代码值的大小决定这两个字符串的大小。比较的结果作为函数值返回:代码值的大小决定这两个字符串的大小。比较的结果作为函数值返回:若字符串若字符串若字符串若字符串1=1=字符串字符串字符串字符串2 2,则返回,则返回,则返回,则返回0 0值;若字符串值;若字符串值;若字符串值;若字符串11字符串字符串字符串字符串2 2,则返回,则返回,则返回,则返回1 1;若字;若字;若字;若字符串符串符串符串11字符串字符串字符串字符串2 2,则返回,则返回,则返回,则返回-1-1。(3 3 3 3)字符串比较函数)字符串比较函数)字符串比较函
46、数)字符串比较函数strcmp()strcmp()strcmp()strcmp()现在学习的是第35页,共47页#include#includevoidmain()charstr10=Book,Basic,Boolen,Babble,Bascket,st10;inti;strcpy(st,str0);for(i=1;i0)strcpy(st,stri);printf(Minimumstringis%sn,st);解题思路:可将解题思路:可将解题思路:可将解题思路:可将5 5 5 5个字符串存放在一个二维字符型数组个字符串存放在一个二维字符型数组个字符串存放在一个二维字符型数组个字符串存放在一个
47、二维字符型数组strstrstrstr中,并设置中,并设置中,并设置中,并设置一个一维字符型数组一个一维字符型数组一个一维字符型数组一个一维字符型数组stststst用来存放最小的字符串。先将用来存放最小的字符串。先将用来存放最小的字符串。先将用来存放最小的字符串。先将strstrstrstr中第一个字中第一个字中第一个字中第一个字符串拷贝到符串拷贝到符串拷贝到符串拷贝到stststst中,并以中,并以中,并以中,并以stststst为基准,逐个与为基准,逐个与为基准,逐个与为基准,逐个与strstrstrstr中余下的中余下的中余下的中余下的4 4 4 4个字符串比较,个字符串比较,个字符串
48、比较,个字符串比较,每次比较,总是将较小的字符串拷贝到每次比较,总是将较小的字符串拷贝到每次比较,总是将较小的字符串拷贝到每次比较,总是将较小的字符串拷贝到stststst中。比较结束时,中。比较结束时,中。比较结束时,中。比较结束时,stststst中存放中存放中存放中存放的就是最小的字符串。的就是最小的字符串。的就是最小的字符串。的就是最小的字符串。【例】编制程序,从给定的【例】编制程序,从给定的【例】编制程序,从给定的【例】编制程序,从给定的5 5 5 5个字符串中找出最小的字符串。个字符串中找出最小的字符串。个字符串中找出最小的字符串。个字符串中找出最小的字符串。现在学习的是第36页,
49、共47页【例】字符串连接函数的使用示例。【例】字符串连接函数的使用示例。【例】字符串连接函数的使用示例。【例】字符串连接函数的使用示例。#include#include#include#includevoidmain()voidmain()chars17=ABC,s2=xyz,str50=abc;chars17=ABC,s2=xyz,str50=abc;strcat(str,strcat(s1,s2);strcat(str,strcat(s1,s2);printf(%s,str);printf(%s,str);该函数用来将第该函数用来将第该函数用来将第该函数用来将第2 2个字符串连接到第个字符
50、串连接到第个字符串连接到第个字符串连接到第1 1个字符串的末尾,它的调用格个字符串的末尾,它的调用格个字符串的末尾,它的调用格个字符串的末尾,它的调用格式为式为式为式为strcat(strcat(字符串字符串字符串字符串1,1,字符串字符串字符串字符串2);2);其中,字符串其中,字符串其中,字符串其中,字符串1 1必须是字符型数组名。函数返回值为第一个字符串。必须是字符型数组名。函数返回值为第一个字符串。必须是字符型数组名。函数返回值为第一个字符串。必须是字符型数组名。函数返回值为第一个字符串。经过连接后,第经过连接后,第经过连接后,第经过连接后,第1 1个字符串末尾的个字符串末尾的个字符串