第4章数组和字符串.ppt

上传人:本田雅阁 文档编号:3430017 上传时间:2019-08-24 格式:PPT 页数:93 大小:1.70MB
返回 下载 相关 举报
第4章数组和字符串.ppt_第1页
第1页 / 共93页
第4章数组和字符串.ppt_第2页
第2页 / 共93页
第4章数组和字符串.ppt_第3页
第3页 / 共93页
第4章数组和字符串.ppt_第4页
第4页 / 共93页
第4章数组和字符串.ppt_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《第4章数组和字符串.ppt》由会员分享,可在线阅读,更多相关《第4章数组和字符串.ppt(93页珍藏版)》请在三一文库上搜索。

1、1,第4章数组和字符串,2,第4章 数组和字符串,4.1 数组的概念 4.2 一维数组 4.3 二维数组 4.4 字符串与字符函数,3,4.1 数组的概念,问题的提出: 第一个问题:输入100个学生的“C程序设计”课程的成绩,将这100个分数从小到大输出。 第二个问题:输入100个学生的“C程序设计”课程的期中和期末成绩,算出总评成绩,总评成绩为“30%期中成绩+70%期末成绩”,计算总评成绩的分数段情况。,4,1.数组的定义,按序排列的同类数据元素的集合就称为数组。 从概念上来说,数组是一组变量,这组变量应该满足下列条件: 具有有相同的名字 具有相同的数据类型 在存储器中连续存放。 按数组元

2、素类型的不同,数组又可分为 数值型数组 字符型数组 指针型数组 结构体型数组,5,2.数组的数据类型,数组的数据类型可以是各种基本数据类型 如int、float、double、char、long等 。 还可以是: 指针型 结构体型 共用体型 枚举型 (以上类型后续章节介绍) 同一数组中的所有元素必须是相同类型的。,6,3.数组的维数,一维数组 元素有一个下标,如a1 二维数组 元素有两个下标,如a11 三维数组 三个下标,如a111 C语言的数组可以是多维的,但一般常用的是一维数组和二维数组。,7,4.2一维数组,4.2.1一维数组的定义 4.2.2一维数组的初始化 4.2.3一维数组的引用,

3、8,4.2.1一维数组的定义,一维数组定义的语法格式如下: 类型说明符 数组名 数组长度; 其中: (1)“类型说明符”可以是任何一种基本数据类型或构造数据类型。例如: int data5; /*整型数组data,有5个元素。*/ char string20; /*字符型数组string,有20个元素 */ (2)“数组名” 命名规则和变量命名规则相同。 (3)数组名后的“数组长度”表示数组中数据元素的个数,数组长度只能是一个整型常量。,9,(4)一个数组定义语句中可以只定义一个数组,也可以定义多个数组,还可以同时定义数组和变量。例如: float b10,c20,f; 定义了: 单精度浮点型

4、数组b,有10个元素; 单精度浮点型数组c,有20个元素; 浮点型变量f。,10,程序段一: #define Size 5 main() int aSize,bSize+10; /*正确 */ 程序段二: main() int n=5; int datan; /*错误 */ ,例如:,11,一组red整数,12,16位,数组red有13个元素,下标为012 注意:没有red13。,定义整型数组red,13,4.2.2一维数组的初始化,初始化是指在数组定义时给数组元素赋予初值。 格式: 类型说明符 数组名常量表达式=数据值1, 数据值2,数据值n; 注意: 数组初始化是在编译阶段进行的,由可执行

5、语句完成的,因此不能将初始化的“=”与赋值号混淆。 规定: 可以只给部分元素赋初值。没有赋初值的元素:对于数值型数组,自动赋初值为0;对字符型数组,自动赋初值为空字符。 例如:,14,int red13=1,2,3,4; 则red4red12的初值都为0。 只能给元素逐个赋值,不能给数组整体赋值。 例如:给数组red中的13个元素全部赋值“2”只能用以下形式来表示: int red13=2,2,2,2,2,2,2,2,2,2,2,2,2; 而不能为了方便写成如下的形式: int red13=2; 初始化数组时,允许省略数组的长度。 例如: int red13=1,2,3,4,5,6,7,8,9

6、,10,11,12,13; 可写为: int red =1,2,3,4,5,6,7,8,9,10,11,12,13;,15,4.2.3一维数组的引用,格式: 数组名下标表达式 其中: 数组下标可以是整型变量或整型表达式, 任何一个数组元素的引用都可以看成是一个变量的使用。 下标从0开始,不能大于数组长度-1 例如: data4、datai+j、datai+ 都是合法的引用方式。,16,【例4.1】数组m8存储其下标值,反向输出m的值。 #include main() int i,m8; for(i=0;i=0;i-) printf(“%d “,mi); ,程序的运行结果如下: 7 6 5 4

7、3 2 1 0,17,允许用表达式表示下标。 【例4.2】在数组m8中存储偶数并输出。 #include main() int i,m8; for(i=0;i8;) mi+=2*i+2; for(i=0;i=7;i+) printf(“%d “,mi); ,程序的最后运行结果如下: 2 4 6 8 10 12 14 16,18,一维数组应用举例,19,例1:用数组方式读入5个整数,并求和。,/* sum of 5 interger */ #include “stdio.h“ void main() int i,data5,sum=0; printf(“nPlease enter 5 integ

8、er:“); for (i=0;i5;i+) scanf(“%d“, ,20,例2: 用数组方式解决Fibonacci数列问题,求出Fibonacci数列的前20项存储在数组中,并将数组内容输出。,前一章的程序:用迭代思想 #include “stdio.h“ void main() int a,b,j,f; a=1;b=1; printf(“%10d%10d“,a,b); for( j=3;j=20; j+) f=a+b; a=b; b=f; printf(“%10d“,f); if (j%5=0) printf(“n“); ,21,#include “stdio.h“ void main(

9、) int i, fib20=1,1 ; /*初始化 */ printf(“n“); for (i=2;i20;i+) fibi=fibi-1+fibi-2 ; for (i=1;i=20;i+) printf(“%10d“,fibi-1); if (i%5=0) printf(“n”); /*每行输出5个*/ ,22,例3: 输入100个整数,求出最小的数以及第一个最小的数在数组中的下标。 分析: 用一个变量min_allo记住最小元素的下标 开始时,假设第0的元素最小,min_allo=0 循环从第一个元素开始,到第99个元素结束 判断该元素是否比下标为min_allo的元素还要小,如果是

10、,就让min_allo记住这个新的最小元素的位置。,23,#include “stdio.h“ #define SIZE 100 void main() int i,dataSIZE; int min_allo; /*记录最小元素的下标 */ printf(“nPlease input %d int:“,SIZE); for (i=0;iSIZE;i+) scanf(“%d“, ,24,例4: 输入10个整数,从小到大排列并输出 。,何为冒泡排序法 算法:(从小到大)将两个相邻的数比较,将小的调换到前头 .每一趟把最大的数放到正确的位置。 何为选择排序法 算法:每次找到最小的数,再和相应位置的

11、数调换位置。,25,9 8 5 4 2 0,1、用冒泡法对10个数进行升序排序 算法:(从小到大)将两个相邻的数比较,将小的调换到前头 .每一趟把最大的数放到正确的位置。,8 9 5 4 2 0,8 5 9 4 2 0,8 5 4 9 2 0,8 5 4 2 9 0,8 5 4 2 0 9,第一趟,结 果,第 5 次,第 4 次,第 3 次,第 2 次,第 1 次,第二趟,26,27,冒泡法程序 main() int a11, i,j,t; printf(“input 10 number:n”); for(i=1;iai+1) t=ai;ai=ai+1; ai+1=t; printf(“the

12、 sorted numbers:n”); for(i=1;i11;i+) printf(“%4d”,ai); ,28,9 8 5 4 2 0,0 8 5 4 2 9,0 2 5 4 8 9,0 2 4 5 8 9,交换过程,结 果,第 5 步,第 4 步,第 3 步,第 2 步,第 1 步,0 2 4 5 8 9,0 2 4 5 8 9,2、用选择法对10个数进行升序排序。 算法:每次将最小的数放到正确的位置。,思路: 设有m个数,排序过程分为m-1个步骤: 第1步、在m个数中找出最小数,然后和第一个数交换,前1个数已经排好序。 第2步、在m-1个数中找出最小数,然后和第2个数交换,前2个数已

13、经排好序。 第k步、在m-k+1个数中找出最小数,然后和第k个数交换,前k个数已经排好序。 这样一直到第m-1步结束。,29,main() int a10, i,j,t,k; for(i=0;i10;i+) scanf(“%d”,选择法程序:,作业:请画出选择排序法的流程图。并分析两种排序法的区别。,30,思考 用冒泡法和选择法如何解决第一个问题:输入100个学生的“C程序设计”课程的成绩,将这100个分数从小到大输出?,31,用一维数组解决第二个问题:输入100个学生的“C程序设计”课程的期中和期末成绩,算出总评成绩,总评成绩为“30%期中成绩+70%期末成绩”,计算总评成绩的分数段情况。

14、分析: 本题要使用三个平行的一维数组。 两个数组的第i个元素分别记录了一个学生的期中成绩和期末成绩。 第三个数组的第i个元素由另两个数组的第i个元素计算得到。,32,score1,期中成绩,score2,期末成绩,finalScore,总评 期中成绩30期末成绩70,剪不断,理还乱!有没有更好的方法?请看二维数组!,33,4.3 二维数组,4.3.1 二维数组的定义 4.3.2 二维数组的初始化 4.3.3 二维数组的引用,34,4.3.1二维数组的定义,语法: 类型说明符 数组名行数列数 其中 “行数”表示第一维下标的长度 “列数”表示第二维下标的长度。,35,如果一维数组是一排平房,那么二

15、维数组就是一栋楼房,36,例如: int m45; /*定义了一个数组名为m的二维数组,其中行数为4、列数为5*/ 该数组的数组元素共有45=20个,分别为: m00,m01,m02,m03,m04 m10,m11,m12,m13,m13 m20,m21,m22,m23,m23 m30,m31,m32,m33,m34,37,题外话.多维数组的扩展,多维数组可以由二维数组扩展而得到,例如: int m234; 定义了一个数组名为m的三维数组,按顺序进行展开后的各个元素值分别如下: m000,m001,m002,m003 m010,m011,m012,m013 m020,m021,m022,m02

16、3 m100,m101,m102,m103 m110,m111,m112,m113 m120,m121,m122,m123,38,关于二维数组的说明:,(1)二维数组在概念上是二维的,也就是说其下标在两个方向上变化。 (2)在语言中,二维数组是按行排列的。 (3)数组元素所占的存储空间大小跟其类型有关系。 (4)一个二维数组可以看成为若干个一维数组。 如m45中包括了四个一维数组:m0,m1,m2,m3 注意:m0、m1、m2和m3不能当作数组元素使用,因为它们是一维数组名,不是一个单纯的数组元素。,39,stu_score是一个53的二维数组。 表示共有5个学生(5行),每行第一列是期中成绩

17、,第二列是期末成绩, 第三列期中30%期末70,存储方式,40,计算机的内存是连续编址的, C语言的编译系统采用按行排列。,a34,41,4.3.2二维数组的初始化,语法: 数据类型说明符 数组名行数列数=数据值,数据值,数据值,数据值,数据值,数据值; 或者 数据类型说明符 数组名行数列数=数据值,数据值,数据值;,42,说明:,(1)二维数组初始化和一维数组初始化的方法基本相同。 区别:二维数组可按行分段初始化,也可以按行连续初始化。 例如对数组m43: 按行分段初始化可写为: int m43=78,65,80,67,89,65,53,68,98,57,88,67; 其中, 78,65,8

18、0是赋给第一行3个数组元素的,这里可以看成是赋给一维数组m0的; 67,89,65是赋给第二行3个数组元素的,这里可以看成是赋给一维数组m1的; 依次类推。,43,按行连续初始化可写为: int m43=78,65,80,67,89,65,53, 68,98,57,88,67 ; 各元素获得的初值和第种方式的结果完全相同。C语言规定,用这种方式给二维数组赋初值时,是先按行、后按列的顺序进行的。 (2)可以只对部分元素赋初值,未赋初值的元素自动取0值。例如: int m34=1,2,3; 是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值依次为: 1 0 0 0 2 0 0 0 3

19、 0 0 0,44,例如:对数组a32: int a32= 5,6,7,8,9,10; /*按行分段初始化*/ int a32= 5,6,7,8,9,10; /*按行连续初始化*/ 上面两种初始化的结果是完全相同的。,45,下面两种初始化 int a32= 5,7,9; /*按行分段初始化*/ int a32= 5,7,9; /*按行连续初始化*/ 则结果却完全不一样。,46,(3)如果对全部元素赋初值,则第一维的长度可以省略,编译系统会自动计算出来。例如: int m33=1,2,3,4,5,6,7,8,9; 可以写为: int m3=1,2,3,4,5,6,7,8,9; 注意: 使用这种方

20、法赋初值,必须给出所有数组元素的初值,否则系统将作出错处理。 列数绝对不能省略,即不能写成: int m3=1,2,3,4,5,6,7,8,9;,为什么?,47,【例4.4】从键盘上输入一个34的矩阵,将其转换后形成43矩阵输出。 分析:矩阵的转置是将矩阵的行和列进行互换,使其行成为列,列成为行 例如:,即: mji,nij,m34,n43,48,#include main() int m34,n43,i,j; printf(“Please enter the number of m34:n“); for(i=0;i3;i+) /* 输入一个34的矩阵存放在数组m中 */ for(j=0;j4

21、;j+) scanf(“%d“, ,49,程序的运行情况为: Please enter the number of m34: 1 1 1 1 2 2 2 2 3 3 3 3 The number of n43 is: 1 2 3 1 2 3 1 2 3 1 2 3,50,4.3.3二维数组的引用,二维数组元素的引用形式为: 数组名下标表达式1下标表达式2 其中,行下标不能大于行数-1,列下标不能大于列数-1。 例如:定义了int stu_score53; 则以下都是正确的引用: stu_score00 stu_score12 stu_score31 而stu_score33是不正确的引用。,5

22、1,【例4.5】 求矩阵m34各个元素中的最小值,并输出最小值元素所在的行和列。 #include main() int i,j; int x,y; int m34=12,1,2,4,2,3,4,5,5,6,7,8; int min=m00; for(i=0;imij) min=mij; x=i; y=j; printf(“The min of m34 is %d.n“,min); printf(“The row of min is %d and the colum of min is %d.“,x,y); ,The min of m34 is 1. The row of min is 0 a

23、nd the colum of min is 1.,52,练一练:判断下面程序的运行结果:,#include “stdio.h“ void main() int i,j,a32; for (i=0;i3;i+) for (j=0;j2;j+) aij=i+j; for (i=0;i3;i+) for (j=0;j2;j+) printf(“ %10d“,aij); printf(“n“); ,53,输入100个学生的“C程序设计”课程的期中和期末成绩,算出总评成绩,总评成绩为“30%期中成绩+70%期末成绩”,计算总评成绩的分数段情况。 分析:本题将定义一个二维数组 int score1003

24、; 使用数组score的每一行记录一个学生的期中成绩、期末成绩和总评成绩。,用二维数组解决第二个问题:,54,程序如下:,#include “stdio.h“ #define SIZE 100 void main() int i,j,flag,s; int grade6=0; int scoreSIZE3; float temp; i=0; while (i=0 else,55,printf(“n007Error data! Please input two scores a student again:“); temp=.3*scorei0+.7*scorei1; /*计算总评成绩 */ s

25、corei2=(int)temp; i+; for (i=0;iSIZE;i+) /*将总评成绩分段(按照5分制 */ s= scorei2/10; switch (s) case 0:case 1:case 2:case 3: case 4:case 5: grade2=grade2+1;break; case 6:case 7: grade3=grade3+1;break; case 8: grade4=grade4+1;break; case 9: case 10:grade5=grade5+1;break;,56, for (i=0;iSIZE;i+) /*输出期中、期末和总评成绩 *

26、/ for (j=0;j3;j+) printf(“%4d“,scoreij); printf(“n“); for (i=2;i6;i+) printf(“nThere are %d students in grade %d.“,gradei,i); ,57,4.4 字符串与字符函数,4.4.1字符数组 4.4.2字符串与字符数组 4.4.3字符串处理函数 4.4.4字符串函数应用举例,58,4.4.1字符数组,1.字符数组的定义 2.字符数组的初始化 3.字符数组举例,59,1.字符数组的定义,格式: 类型名 数组名数组元素个数; 其中的“类型名”必须是char。 例如: char c10;

27、 定义了一个名为c的字符数组,包含10个元素。 和数值数组一样,字符数组也可以是二维或多维数组。例如: char c89;,60,2.字符数组的初始化,在定义字符数组时,可以直接对字符数组进行初始化。 如:char str6= H, e, l, l, o; 给字符数组赋初值时,如果花括号中字符的个数大于字符数组定义的数据元素的个数,则编译系统会报告出错。 如果花括号中数据元素的个数小于字符数组定义的数据元素的个数,初始化中未给出数据元素值的对应元素被自动赋值为空字符0。 如:上面定义的str赋值后各元素的值如下所示: c0=H c1=e c2=l c3=l c4=o c5=0,61,【例4.8

28、】输出一个钻石图形。 #include main () static char diamond 5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; /*第二维大小不能省略*/ int i,j; for (i=0;i5;i+) /* 逐行 */ for (j=0;j5;j+) /*逐列*/ printf(“%c“,diamondij); printf(“n“); ,* * * * * * * *,3.字符数组举例,62,例: 以$符号为终止符号接收一组字符,并逆序输出这组字符。,#include “stdio.h“ void main() char c80; int

29、 i; puts(“Please input a string:“); for (i=0;(ci=getchar()!=$;i+); /*读入一组字符 */ for (i-; i=0;i-) /*从最后一个字符开始逆向输出 */ putchar(ci); ,63,4.4.2字符串与字符数组,1.字符串初始化赋值 2.用二维数组存放多个字符串 3.字符数组的输入/输出 4.字符串大小的比较,64,1.字符串初始化赋值,语言允许用字符串的方式对数组作初始化赋值。具体有两种方式: (1)按单个字符的方式赋初值,其中必须有一个字符是字符串的结束标记。例如: char s=1, 2,3,0; (2)直接

30、在初值表中用双引号写一个字符串常量。例如: char s=“123”; /*相当于char s4=“123”; */ 其中的“”可以省略,如: char s=“123“; s0的值为1,s1的值为2,s2的值为3,s3的值为0。字符数组s中存放的是一个字符串。,65,2.用二维数组存放多个字符串,当需要处理多个字符串时,可以采用二维数组,此时二维数组的列值取最大字符串的长度。 例如:存放三个字符串”123”、”ab”、”A”可采用如下的形式: char s34=“123“,“ab“,“A“; 表示:,66,3.字符数组的输入/输出,关于字符数组的输入/输出,有如下规定: (1)逐个字符输入/输

31、出。用格式符“%c“输入/输出一个字符。 (2)将整个字符串一次性输入/输出。用格式符“%s“对整个字符串进行一次性输入/输出。 注意:使用“%s“格式从键盘上向字符数组中输入字符串时,回车换行符或空格符号均作为字符串的结束标记。,67,#include main() char c5=H,e,l,l,o; int i; for(i=0;i7;i+) printf(“%c“,ci); printf(“n“); ,程序的运行结果都是: Hello,【例4.9,4.10】对字符数组中的元素进行逐个输出和字符串方式输出的比较。,#include main() char c =“Hello“; prin

32、tf(“%sn“,c); ,68,【例4.11】请输入一个长度小于20的字符串,并将该字符串输出。 #include main() char m20; printf(“input string:n“); scanf(“%s“,m); printf(“%sn“,m); ,程序运行情况为: input string: hello human hello,空格以后的字符都未能输出(字符串以空格或回车作为串的结束符)。 为了避免这种情况,可多设几个字符数组分段存放含空格的串。,69,程序可改写成如下形式: #iclude main() char m16,m26; printf(“input strin

33、g:n“); scanf(“%s%s“,m1,m2); printf(“%s %s n“,m1,m2); ,修改后的程序运行情况为: input string: abcd efghi abcd efghi,70,4.字符串大小的比较,字符串可以进行大小比较,比较时按照从前向后的顺序逐个字符比大小。 字符大的对应字符串就大。 例如:“abcd“小于“bcde“。 如果全部字符均相同,则字符串相等。 例如:“abcd“等于“abcd“。 如果字符串长度不等,而前面字符均相同,则长度大的字符串为大。 例如:“abcd“大于“abc“。,71,4.4.3字符串处理函数,1.字符串输出函数puts 2.

34、字符串输入函数gets 3.测试字符串长度函数strlen 4.字符串连接函数strcat 5.字符串比较函数strcmp 6.字符串拷贝函数strcpy 7.小写变大写函数strupr 8.大写变小写函数strlwr,72,1.字符串输出函数puts,调用形式: puts(字符数组); 功能:把字符数组中的字符串输出到显示器,即在屏幕上显示该字符串的内容。其中,字符串的结束标记将转换成回车换行符。,73,【例4.12】puts函数的应用举例。 #include“stdio.h“ main() char c=“HellonHuman“; puts(c); ,程序运行后,将在显示器上输出: He

35、llo human,74,#include “stdio.h“ void main() char str=“Hello“; printf(“%s“,str); printf(“%s“,str); 运行结果 ?,#include “stdio.h“ void main() char str=“Hello“; puts(str); puts(str); 运行结果: ?,读程序:,75,2.字符串输入函数gets,调用形式: gets(字符数组); 功能:从键盘上输入一个字符串,并存入到指定的字符数组中。 【例4.13】gets函数的应用举例。 #include“stdio.h“ main() ch

36、ar m20; printf(“input string:n“); gets(m); puts(m); ,程序的运行情况为: Input string: hello human hello human,76,可以看出当输入的字符串中含有空格时,输出仍为全部字符串。这说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束的标志。 注意:gets函数和使用“%s“格式的scanf函数都可以从键盘接受字符串,但在输入时有所区别: (1)对于scanf函数,“回车“或“空格“都看成字符串结束标记; (2)对于gets函数,只有“回车”才作为字符串结束标记,“空格”看成字符串的一部分

37、。 说明:puts函数和gets函数只能输入/输出一个字符串。例如: puts(str1,str2); 和gets(str1,str2,str3);都是错误的。,77,3.测试字符串长度函数strlen,功能:测试指定字符串的实际长度(不含字符串结束标志0),并返回字符串的长度。 调用形式: strlen(字符数组); 其中 函数的参数可以是字符型数组名或字符串常数 函数的返回值是字符串长度。,78,【例4.14】strlen函数的应用举例。 #include #include main() int n; static char m=“Hello Human“; n=strlen(m); pr

38、intf(“The lenth of the string is %dn“,n); ,程序的运行结果如下: The lenth of the string is 11,79,4.字符串连接函数strcat,调用格式: strcat(字符数组1,字符数组2); 功能: 把字符数组2中的字符串连接到字符数组1 中字符串的后面,同时删去字符串1中的串标志0,组成新的字符串。 该函数返回值是字符数组1的首地址。,80,【例4.15】strcat函数的应用举例。 #include #include main() static char m130=“My name is “; char m210; pri

39、ntf(“input your name:n“); gets(m2); strcat(m1,m2); puts(m1); ,程序的运行情况如下: input your name: human My name is human,81,5.字符串比较函数strcmp,strcmp函数用来对两个字符串进行比较,其调用格式为 strcmp(字符串1,字符串2); 其中,字符串1和字符串2可以是字符型数组名或字符串常数。 功能: 按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回如下所示的比较结果: 字符串1等于字符串2时,返回值为:0。 字符串1大于字符串2时,返回值为:字符串1-字符串2

40、的值,大于0。 字符串1小于字符串2时,返回值为:字符串1-字符串2的值,小于0 。,82,【例4.16】strcmp函数的应用举例。 #include #include main() int n; static char m115,m2=“hello human“; printf(“input a string:n“); gets(m1); n=strcmp(m1,m2); if(n=0) printf(“m1 equale m2n“); if(n0) printf(“m1m2n“); if(n0) printf(“m1m2n“); ,程序运行情况如下: input a string: ab

41、cd m1m2,83,6.字符串拷贝函数strcpy,调用格式: strcpy(字符数组1,字符数组2); 功能: 把字符数组2中的字符串拷贝到字符数组1中。串结束标志0也一同拷贝。 说明:字符数组2也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。,84,【例4.17】strcpy函数的应用举例。 #include“string.h“ main() char m115,m2=“hello human “; strcpy(m1,m2); puts(m1); printf(“n“); ,程序的运行结果如下: hello human,85,7.小写变大写函数strupr,调用格式:

42、strupr(字符串); 功能:strupr函数用来将字符串中的小写字母转换成大写字母,其他字符(包括大写字母和非字母)不转换。 其中,函数的参数可以是字符型数组名或字符串常数,函数的返回值是转换后的字符串。upr表示uppercase。,86,【例4.18】将输入的字符串中的所有小写字母转换成大写字母,并输出。 #include #include main() char str80; puts(“please input a string:“); gets(str); strupr(str); puts(str); ,程序的运行情况为: please input a string: welc

43、ome WELCOME,87,8.大写变小写函数strlwr,调用格式为 strlwr(字符串); 功能:strlwr函数用来将字符串中的大写字母转换成小写字母,其他字符(包括小写字母和非字母)不转换。 其中,函数的参数可以是字符型数组名或字符串常数,函数的返回值是转换后的字符串。lwr表示lowercase。,88,【例4.19】将输入的大写字母字符串转换成小写字母字符串,并输出。 #include #include main() char st80; puts(“please input a string:“); gets(st); strlwr(st); puts(st); ,程序运行情

44、况为: please input a string: WELCOME welcome,89,4.4.4字符串函数应用举例,【例4.21】 统计输入的文字有多少个单词。 #include “stdio.h“ main () char st80; int i,num=0,word=0; char c; puts(“Please input a string:n“); gets(st); /* 输入一段文字到一维数组st */ for(i=0;(c=sti)!=0;i+) if (c= ) word=0; /* c为空格,没出现单词*/,90,else if (word=0) word=1; num

45、+; /*单词数累加*/ printf(“There are %d words in the linen“, num); ,程序的运行情况如下: Please input a string: hello human ni hao There are 4 words in the line,91,【例4.22】利用二维数组,找出三个字符串中的最大者(ASCII值)。 #include main () char st20; char str320; /*每行一个字符串*/ int i; puts(“Please enter three string:“); for(i=0;i0) strcpy(st,str0); /* 字符串str0复制到st */ else strcpy(st,str1); if(strcmp(str2,st)0) strcpy(st,str2); printf(“nthe largest string is: %s.n“,st); ,92,该程序的运行情况如下: P

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1