第5章数组字符串.ppt

上传人:sccc 文档编号:5828330 上传时间:2023-08-24 格式:PPT 页数:30 大小:1.02MB
返回 下载 相关 举报
第5章数组字符串.ppt_第1页
第1页 / 共30页
第5章数组字符串.ppt_第2页
第2页 / 共30页
第5章数组字符串.ppt_第3页
第3页 / 共30页
第5章数组字符串.ppt_第4页
第4页 / 共30页
第5章数组字符串.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

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

1、1/30,5.3 字符数组与字符串,char a=W;char b=a;char c=n;char d=g;char e=L;char f=i;,如何让程序存储我的姓名?,Wang Li,char name15=W,a,n,g,L,i;,用若干个字符,用字符数组,用字符串char name15=“Wang Li”;,2/30,5.3.1 一维字符数组,一维字符数组的定义、引用、初始化与其他类型的一维数组一样。char str80;定义一个含有80个字符型元素的数组str char t5=H,a,p,p,y;初始化数组 t,输出数组 t 的所有元素for(i=0;i5;i+)putchar(ti

2、);,3/30,5.3.2字符串,字符串常量是双引号括起的任意字符序列,Hello WorldWangPingPlease enter your full name:“Hello!n,字符串常量中可以包含转义序列,字符串结束符,字符串的有效长度:有效字符的个数,字符串常量,3,4/30,字符串的存储,auto char s80=Happy;字符串遇 0 结束第一个 0 前面的所有字符和 0 一起构成了字符串 Happy”0 之后的其他数组元素与该字符串无关,字符串由有效字符和字符串结束符 0 组成,5/30,字符串与字符数组,在语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串字符

3、数组和字符串的区别是:字符串的末尾有一个空字符 0,字符串可按如下方式声明并初始化:char name15=W,a,n,g,L,i,0;char name15=WangLi;char password=12345678;,手工加入一个空字符,系统将自动加入一个空字符,省略数组大小,系统自动计算,大小为后面的字符总数加1,最后一个元素存入一个空字符。,6/30,2.对字符串的操作,把字符串放入一维字符数组(存储)对字符串的操作=对字符数组的操作普通字符数组:数组元素的个数是确定的,一般用下标控制循环字符串:没有显式地给出有效字符的个数,只规定在字符串结束符 0 之前的字符都是字符串的有效字符,一

4、般用结束符 0 来控制循环循环条件:si!=0,7/30,5.3.3 字符串的输入输出,例11 从键盘读入一个字符串,以回车符表示输入结束。输出该字符串长度,然后输出该字符串,方法1:象普通数组一样逐元素输入输出,输入:s0=getchar();/读入第一个字符i=0;while(si!=n)/当不是回车i+;si=getchar();si=0;/将n转换为 0,或i=0;while(si=getchar()!=n)i+;si=0;/将n转换为 0,for(i=0;stri!=0;i+)putchar(stri);,字符串长度是i还是i-1、i+1?,字符串长度是有效字符个数s0si-1,共i

5、个,输出字符串,不需要知道字符个数,0是结束标志,0,8/30,方法2:用%s整体输入输出,char name10;,scanf(%s,name);,printf(%s,name);,格式描述串中使用转换字符串“%s”,Wang Li,Wang,空格是%s输入结束的标志,9/30,方法3:用gets和puts函数,char name10;gets(name);puts(name);,Wang Li,Wang Li,从键盘上读入一个完整的行,存入字符数组name。并用空字符0取代行尾的换行符n。,把字符数组中的字符串输出到显示器。,10/30,5.3.4字符串应用举例,例12.输入一行字符(字符

6、个数不多于80),统计其中空格的个数,思路分析:(1)定义字符数组 str81;(2)读入字符串若字符串确定不含空格,可以用scanf(“%s”,i+),11/30,#include int main()char str81;int i,count=0;printf(n 请输入一行字符:n);gets(str);for(i=0;stri!=0;i+)if(stri=)count+;printf(“n 其中的空格总数为%d n,count);,C is a programming language,在循环执行时,扫描整个数组以统计出空格 的数量,直到遇到字符 0。,其中的空格总数为 4,也可用w

7、hile 循环i=0;while(stri!=0)if(stri=)count+;i+;,12/30,(1)输入一个以回车结束的字符串(少于80个字符),统计其中数字字符的个数。(2)输入一个以回车结束的字符串(少于80个字符),统计其中0、1、2、9,哪个数字字符的出现次数最多,模仿练习:,#include int main()int count,i;char str80;printf(Enter a string:);gets(str);count=0;for(i=0;stri!=0;i+)/若是数字 if(stri=0)count+;printf(count=%dn,count);ret

8、urn 0;,模仿练习 源程序,Enter a string:Its 512?count=3,14/30,例13 进制转换,输入一个以回车结束的字符串(少于80个字符),把字符串中的所有数字字符(09)转换为整数,去掉其他字符。例如,字符串”3a56bc”,转换后的整数为356,难点分析:如何将字符串转化为整数值?例如字符串”356“转换为整数356(1)遇到第一个整数3,d=3;(2)遇到第二个整数5,d=d*10+5=35(3)遇到第三个整数6,d=d*10+6=356.,d=0;for(i=0;stri!=0;i+)if(stri=0&str=9)d=d*10+(stri-0),stri

9、中存的是字符,stri-0将其转化为对应的十进制数字,15/30,#include int main()int d,i;char str80;printf(Enter a string:);gets(str);d=0;for(i=0;stri!=0;i+)/若是数字 if(stri=0)d=d*10+(stri-0)printf(“d=%dn,d);return 0;,16/30,例14 统计单词个数,方法1:统计空格数?问题:没多个空格相连的情况方法2:如果一个空格紧跟一个非空格,一定是新单词开始 this is my first test!问:第一个单词是否算上?答:count再加1就行!

10、?再问:若第一个单词前有空格会怎样?就又多了1,17/30,思路分析,方法3:如果一个非空格后是一个空格,一定是单词的结束 this is my first test!问:最后一个单词没算上?答:count再加1就行!?再问:若最后一个单词后有空格会怎样?就又多了1,18/30,思路分析,设置一个标志变量word开始word置0For(i=0;stri!=0;i+)/扫描整个字符串 若stri是空格 word置0 若stri不是空格且word=0 则新单词出现,count+;word置1;,19/30,#includeint main()char str1000;int i,word,coun

11、t;word=0;count=0;gets(str);for(i=0;stri!=0;i+)if(stri=)word=0;if(stri!=,程序实现,20/30,5.3.5 常用字符串函数,以下介绍的字符串函数定义在头文件中(1)strlen:求字符串长度(2)strcpy:字符串复制(赋值)(3)strcmp:字符串比较(4)strcat:字符串合并(5)strrev:字符串逆置,21/30,2023/8/24,21,(1)求字符串长度 strlen(),调用格式:strlen(str)功能:测试字符串长度。函数值就是str中字符的个数。,输出结果:5,例如:char str10=Chi

12、na;printf(%d,strlen(str);或printf(%d,strlen(China);,22/30,2023/8/24,22,(2)字符串复制函数 strcpy(),调用格式:strcpy(str1,str2)功能:将str2中的字符串复制到str1数组中。,思考:这样赋值s1=Beijing;或 s1=s2;可以吗?为什么?,s1的结果,例如:char s110,s2=Beijing;strcpy(s1,s2);或:strcpy(s1,Beijing);,23/30,字符串的赋值需要通过strcpy实现,char str110=“China”;,正确,char str110;s

13、tr1=“China”;,错误,改为:char str110;strcpy(str1,“China”);,char str110,str2=“China”;str1=str2;,改为:char str110,str2=“China”;strcpy(str1,str2);,为什么不允许这样赋值?因为数组名是一个常量,代表数组的首地址,常量不可以被赋值,其值不可改变,错误,24/30,24,(3)字符串比较函数 strcmp(),调用格式:strcmp(str1,str2),功能:比较str1和str2的大小,若前者大则返回一个正整数,若后者大则返回一个负整数,若两者相等,则返回0。注意:比较两个

14、字符串的大小只能使用此函数,而不能使用“”、“”、“=”等关系运算符。,字符串比较规则:按自左至右的顺序,对应字符比较,若当前对应字符不同,则返回二者ASCII码的差,若二者相同,则比较下一个字符,直到遇到不同字符为止,函数返回值为两字符的差,str1 str2“cat”“fan”“abcde”“abd”“abcde”“abc”“abc”“abc”,=,strcmp(str1,str2)0,strcmp(str1,str2)0,strcmp(str1,str2)0,strcmp(str1,str2)=0,25/30,2023/8/24,25,(4)字符串连接函数 strcat(),调用格式:s

15、trcat(str1,str2)功能:把str2中的字符串连接到str1字符串的后面,结果放在str1数组中.,Str1 必须足够大,输出结果:beijing and shanghai,例如:char str121=beijing and;char str2=shanghai;strcat(str1,str2);printf(%s,str1);,26/30,(5)字符串逆置函数strrev(),调用格式:strrev(str)功能:将字符串str 前后颠倒,char str10=“china”;strrev(str);puts(str);,输出:anihc,27/30,小练习:,输入三个字符串

16、,输出最大的字符串,28/30,5.3.6 字符串数组,一维字符数组可以存储一个字符串,二维字符数组可以存储多个字符串,称为字符串数组。字符串数组的每一行元素中都含有字符串结束符0,因此它的一行元素可以和字符串一样输入、输出及初始化。如:char color 10=“red,blue,yellow,“green,purple;,例15:输入n,输入n个字符串输出最大字符串,字符串数组可以用二维字符数组存储。,29/30,假定字符串个数不多于100个,每个字符串长度不超过80,例15:输入n,输入n个字符串输出最大字符串,(1)用第一个数str0做临时最大值max(2)擂台赛:for(i=1;in;i+)如果stri比max大,则替换max(3)输出max,30/30,#include#include#define N 100#define LEN 81int main()char strNLEN,maxStrLEN;int n,i;scanf(%d,该程序运行结果有问题:输入5,但只能读入4个字符串,就输出了最大值为什么?分析一下到VC中跟踪一下!,输入5之后的输入那个回车被读入作为str0了如何解决?在scanf(“%d”,之后加一getchar()语句吃掉回车,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号