收藏 分享(赏)

C语言字符数组.ppt

上传人:HR专家 文档编号:8286127 上传时间:2019-06-18 格式:PPT 页数:36 大小:357.50KB
下载 相关 举报
C语言字符数组.ppt_第1页
第1页 / 共36页
C语言字符数组.ppt_第2页
第2页 / 共36页
C语言字符数组.ppt_第3页
第3页 / 共36页
C语言字符数组.ppt_第4页
第4页 / 共36页
C语言字符数组.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、1,1,1,第10讲 主讲教师:沈蒙波,数组(2) 字符数组、字符数组应用,2,2,2,本讲主要内容,本讲小结,重点:字符数组、字符串 的定义和使用,第6章6.3,3,1.1 字符数组的引入,C语言中有字符型常量和字符串常量;,如:a “a“,注意:a“a“,C语言中只有字符型变量,没有字符串变量;,例如: char a=a,b=“a“;,C语言中处理和存放字符串必须用字符数组。一维字符数组只能存放一个字符串,二维字符数组可以存放多个字符串。,4,字符串常量,字符串常量是以双引号括起来的,以空字符0 结尾的字符序列。 0 是C语言规定的“字符串结束标志”。 结束符由系统自动加上并不显示。 如:

2、 “You are students. “,字符串实际占用的空间字节数比它的长度值多1。,字符串的长度:指字符串中字符的个数(西文字符,不包括结束符)。如: “ABCDn“c+程序设计“,字符串长度:5,字符串长度:11,参看“测字符串长度.c”,5,1.2 字符数组的定义,字符数组的定义形式为:,类型说明符 数组名 常量表达式;,可以是哪种类型?,char int,思考: 存放30名学生的学号(学号为字符串常量), 应如何定义数组?,6,1.3 字符数组初始化(1),1.2 字符数组初始化,逐个字符赋给数组中各元素。,如: char c10=I, ,a,m, ,h,a,p,p,y;,如果花括

3、号中提供的初值个数大于数组长度,则语法错误;如果初值个数小于数组长度,只将这些字符赋给数组中前面那些元素,其余为0。,如:char c10=p,r ,o,g,r,a,m; 则:c0=p; c1=r; c2=o; c3=g; c4=r; c5=a; c6=m; c7=0;,7,字符数组的初始化(2),1.2 字符数组初始化(续),如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。,如:char c =p,r ,o,g,r,a,m;,也可以用字符串常量初始化字符数组。,如:char b =“I am happy“; 或: char b =“I a

4、m happy“;,8,说明,char a = I, ,a,m, ,h,a,p,p,y;,char a = “I am happy“;,相当于a10,相当于a11,字符数组并不要求它的最后一个字符为0。,字符数组与字符串的区别?,9,不能使用赋值语句将一个字符串常量或字符数组直接赋值给一个字符数组。,1.4 字符数组赋值,例如: char s4,str110,str210 s0=c; s1=a; s2=t; s3=0 /正确 s=“cat“; /错误 s =“cat“; /错误 str1=str2; /错误,10,1.5 字符数组的引用(1),1.3 字符数组的引用,例1 输出一个字符串(I

5、am a boy),main() char c10=I, , a, m, , a, , b, o, y;int i ;for(i=0;i10;i+)printf(“%c“,ci);printf(“n“); ,注意空格字符的表示,程序编写,11,字符数组的引用(2),1.3 字符数组的引用,例2 输出一个钻石图形,程序编写,main() char diamond 5= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,*;int i,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(“%c“,diamondij);printf(“n“);,总结:输出

6、特定字符串,或特定形状时的方法,12,1.6 字符数组的输入和输出(1),逐个字符:用格式符%c输入或输出一个字符。,如: char c10=“China“;int i;for (i=0;i10;i+)printf(“%c“,ci);,将字符串一次输入输出:用%s格式符。,char c10; scanf(“%s“, ,如:char c10;scanf(“%s“,c); printf(“%sn“,c); ,13,字符数组的输入和输出(2),如果数组长度大于字符串实际长度,只输出到遇0结束。,如: char c10=“China“;printf(“%s“,c; 会输出什么结果?,只输出“China

7、”5个字符,14,字符数组的输入和输出(3),如果利用scanf函数输入字符串,空格为多个字符串的分隔符。P160,如: char str13;scanf(“%s”,str); 如输入以下12个字符:How are you? 则str数组状态为,如何解决这个问题?,如果一个字符数组中包含一个以上0,则遇第一个0时输出就结束。,15,字符数组的输入和输出(4),例:char str15,str25,str35; scanf(“%s%s%s”,str1,str2,str3);,输入:How are you?,16,用于存放字符串的一维字符数组可以看成为字符串变量,像简单变量一样单独使用(即不使用下

8、标)。例:char name =“Smith“;printf(“He is %s.“,name);,思考题:char s10;s0=a; s1=0; s2=b; s3=c; s4=n;printf(“%s“,s);,字符数组的输出,参看 “字符数组的输出2.c”,输出结果如何?,17,同理,存放字符串的二维数组就可视作存放字符串的一维字符数组。,例:char s510 ; 相当于定义了5个字符串变量,s0、 s1、 s2、 s3、 s4分别是5个字符串的起始地址。,18,定义一个3行10列的二维字符数组,如何使用scanf和printf函数输入、输出字符串?,思考题:,参看“二维字符数组的输入

9、、输出.c”,返回主菜单,19,2 字符串处理函数(1),puts(字符数组名或字符串常量),gets(字符数组名),如:char str=“Chinan Beijing”;puts(str);,如:gets(str) 从键盘输入:Computer,20,gets()、puts()一次只能输入输出一个字符串; scanf()、printf()则可以输入输出多个字符串。,gets()函数输入的字符串以回车符结束; scanf()函数以空格或回车符结束字符串的输入。,注意:,gets()、puts()函数和scanf()、printf()一样,都包含在stdio.h头文件中。 puts()输出后,

10、自动换行。,21,#include void main() char s120,s220;scanf(“%s“,s1); gets(s2);puts(s1);puts(s2); ,输入:It is a book.,输出:It is a book.,输出结果?,例3:字符数组的输入和输出,参看“字符数组的输入和输出3.c”,22,例4:字符数组的输入和输出,当运行程序时, 从键盘输入: aabb ccdd 程序的运行结果是:aabbccdd,#include main() char a15,a25,a35,a45;scanf(“%s%s“,a1,a2);gets(a3);gets(a4);put

11、s(a1);puts(a2);puts(a3);puts(a4); ,23,字符串处理函数(2),strcat(字符数组1,字符串2或字符数组2),如: char str130=“Peoples Republic of ”;char str2 =“China”;printf(“%s”,strcat(str1,str2);,函数功能:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中。,24,字符串处理函数(3),strcpy(字符数组1,字符串2) 或: strncpy(字符数组1,字符串2,k),函数功能:字符串拷贝函数,将字符串2拷贝到字符数组1。,如: cha

12、r str110,str2 =“China”;strcpy(str1,str2);printf(“%s,%s”,str1,str2);,25,字符串处理函数(4),strcmp(字符串1,字符串2),函数功能:对两个字符串自左到右逐个字符比较(按ASCII码大小比较),直到出现不同的字符或遇0为止 比较结果: 串1=串2 函数值为0串1串2 函数值为正整数串1串2 函数值为负整数,如:if (str1=str2) printf(“yes”); if (strcmp(str1,str2)=0) printf(“yes”); ,26,字符串处理函数(5),strlen(字符数组),函数功能:测试字

13、符串长度的函数。函数值为字符串中实际长度,不包括0在内,如: char str10=“China”;printf(“%d”,strlen(str);,27,字符串处理函数(6),strlwr(字符串),strupr(字符串),字符串处理函数见P385,28,3 字符数组与字符串应用(1),例3.1:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。,如:There is a book on the desk.,输入字符串,gets(变量名),统计多少个单词,循环,循环初值 循环条件(c=stringi)!=0 循环体,程序编写,29,字符数组与字符串应用(2),例3代码,#includ

14、e “stdio.h“ main() char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=32) word=0;else if(word=0)word=1;num+;printf(“there are %d words in the line.n“,num);,30,字符数组与字符串应用(2),例3.2:有三个字符串,要求找出其中最大者,输入字符串,gets(变量名),比较字符串,字符串比较,程序编写,31,例4代码,main() char string20;char str32

15、0;int i;for(i=0;i0) strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0) strcpy(string,str2);printf(“n the largest string is :n%sn“,string);,运行结果: CHINA HOLLAND AMERICA the largest string is: HOLLAND,返回主菜单,32,字符数组应用例3.3,例6 输出右图图案,char a5=*,*,*,*,*; int i,j,k; char space= ; for (i=0;

16、i5;i+) printf(“n“);printf(“ “);for(j=1;j=i;j+)printf(“%c“,space);for(k=0;k5;k+)printf(“%c“,ak); printf(“n“);,33,例3.4:不用strcat函数,将两个字符串连接起来。,while(s2j!=0) s1i+=s2j+;,s1i=0;,34,3 数组应用举例(3),例7程序代码,#include void main() char s180,s240;int i=0,j=0;printf(“ninput string1:“);scanf(“%s“,s1);printf(“input string2:“);scanf(“%s“,s2);while(s1i!=0)i+;while(s2j!=0)s1i+=s2j+;s1i=0;printf(“The new string is:%sn“,s1); ,返回主菜单,35,35,35,本讲小结,掌握字符数组定义、引用和初始化方式 掌握字符串的定义,字符串的存放方式 掌握字符数组的输入和输出方法 掌握常用字符串函数的使用 阅读并理解教材第6章例题 完成编程题:P169 10,12,13,15,36,36,36,谢谢,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报