《C语言基础模块4pa.ppt》由会员分享,可在线阅读,更多相关《C语言基础模块4pa.ppt(29页珍藏版)》请在三一办公上搜索。
1、数组(二),模块4,共 34 页 第 2 页,1 字符与字符串 2 字符数组 3 字符串处理函数4 二维字符数组5 应用实例,字符数据处理,共 34 页 第 3 页,符号常量:以指定符号代表其后的“一串字符”格式:#define 标识符 常量,1 字符与字符串,一、字符型数据,可以是任意类型常量,字符常量:以 括起来的单个字符,开头的字符序列。,例:a,A,n表示换行,r表示回车。,字符串常量:用双引号括起来的字符序列。,例:”Ch”,”123”等。长度不限,末尾加0,字符变量:存放字符常量的变量,用char说明。,共 34 页 第 4 页,1 字符与字符串(续),二、字符串,串长:字符串中所
2、包含的字符数。串结束标记:字符 0 称为串结束标记。,C中的串以 0 结束。,字符串在数组中的存储格式,字符串可以存在一个一维数组中,字符串中的一个字符占用字符数组中一个字节,具有数组特性。字符串实际占有单元的数量等于字符串长度+1。,例如:要定义一个存放字符串“CHINA”的字符数 组c,应定义为:char c6;数组c在内存中实际存放情况为:,共 34 页 第 5 页,串长=5,三、字符数据的输入输出,库函数:getchar(),putchar(ch),从键盘上读一个字符,1 字符与字符串(续),使用getchar()时,可以输入任何字符,允许用户根据自己的要求进行控制与处理,串尾0要自己
3、编程加入。其中ENTER接受为r(回车)。,格式化输入输出函数:scanf();printf();”%c”,共 34 页 第 6 页,格式:数据类型 数组名维数说明;,例:char a4,b10;char c34;表示a数组可以存放4个字符,c数组可以存放12个字符。,例:c34可存放三个字符串,每个字符串最多存放4个字符。,一维字符型数组作为一个字符串变量使用。二维字符型数组相当于一个字符串数组,每行存放 一个字符串。,2 字符数组(续),一、一维字符数组的定义,二、字符数组的用途,共 34 页 第 7 页,8-2 字符数组,三、一维字符数组的初始化,用字符串对字符数组初始化,如:char
4、ch6=CHINA;char ch6=CHINA;/*省略*/char ch=CHINA;/*省略长度值*/,字符数组初始化,用单个字符对字符数组初始化,如:char ch6=C,H,I,N,A,0;,2 字符数组(续),共 34 页 第 8 页,2 字符数组(续),四、一维字符数组的引用,如:char a10=CHINA2000”,b3=“123”;printf(“%cn”,a3);printf(“%sn”,a);,对于字符数组,不仅可以引用它的数组元素,也可以引用整个数组。,共 34 页 第 9 页,2 字符数组(续),static char a3;for(i=0;i3;i+)scanf(
5、%c,输入数据顺序:d o s输出数据顺序:dos,四、字符数组的输入与输出,单字符输入输出(用格式符c控制),共 34 页 第 10 页,static char a7;scanf(%s,a);,2 字符数组(续),字符数组名指明数组首地址,字符串输入输出(用格式符s控制),0不输出,只能输入不包括空格、t和n的字符串自动在串尾加0,printf(%sn,a);,共 34 页 第 11 页,五、字符串在数组中的存储格式,使用字符0作为字符串的结束标记,就使得C语言对字符串的长度没有具体的限制,但字符串的最大长度不能超过存储它的字符数组的长度,否则会造成数组越界错误。,2 字符数组(完),0是在
6、字符串存入字符数组是由系统自动添加的,并不是字符串本身的一部分,在计算串长的时候并不包括 0。,共 34 页 第 12 页,3 字符串处理函数,一、字符串输入输出函数,gets(字符数组名);,由终端输入字符串到字符数组,以换行结束 返回字符数组的首地址,puts(字符数组名);,将以0结束的字符串输出到终端 返回的函数值是字符数组的首地址,共 34 页 第 13 页,3 字符串处理函数(续),格式:strlen(x);,功能:返回x字符串中字符的个数(不包括字符串结束符)。,x是字符串首地址,其形式可以是字符数组或字符指针,也可以是字符常量。,二、求字符串长度的函数,共 34 页 第 14
7、页,3 字符串处理函数(续),格式:strcat(字符数组1,字符数组2);,功能:连接两个字符数组中的字符串,将串2接在串1后,结果存放在字符数组1中,返回的函数值是字符数组1的首地址。,字符数组1的长度不可缺省,足够大。,三、字符串连接函数,四、字符串复制函数,格式:strcpy(字符数组1,字符数组2);,功能:将串2复制到串1数组中。,共 34 页 第 15 页,程序#include void main()char str1100,str2100;int i,j;printf(”Enter string 1:”);gets(str1);printf(”Enter string 2:”)
8、;gets(str2);for(i=0;str1i!=0;i+);/*确定0位置*/for(j=0;(str1i=str2j)!=0;i+,j+);printf(”Output string 1:%sn”,str1);,例8 字符串连接。将串str2连接到串str1之后。根据字符串中 0 的位置进行字符串连接。关键:要用str2的第1个字符覆盖str1的串结束标记0。,a,b,c,d,e,f,g,0,str2,str1,.,.,.,算法:1、查找str1的串结束标记02、从str1的0开始,将str2复制到str1。,3 字符串处理函数(续),共 34 页 第 16 页,例9 字符串复制。将字
9、符串 str1 拷贝到串 str2 中。没有必要复制整个数组,根据字符串中 0 的位置,只对 0 前面的字符进行复制。,#include void main()char str1100,str2100;int i;printf(Enter string 1:);gets(str1);/*输入字符串str1*/for(i=0;(str2i=str1i)!=0;i+);/*复制*/printf(Output string 2:%sn,str2);,a,b,.,.,.,f,g,0,str1,str2,.,.,.,3 字符串处理函数(续),共 34 页 第 17 页,3 字符串处理函数(续),五、字符
10、串比较函数,格式:strcmp(字符数组1,字符数组2);,功能:比较串1和串2,返回结果为:0-相等,正数-串1大,负数-串2大,”abc”与”abc”,相等”abcd”与”abck”,”abcd”小”abc”与”ab”,”abc”大,比较原则:按ASCII码比较,共 34 页 第 18 页,例10 字符串比较。确定字符串大小的基本规则:按照串中对应位置字符的ASCII码值的大小确定大小。例如:”abc”abadef”因为字符 c a#include”stdio.h”void main()char str1100,str2100;int i;printf(Enter string 1:);g
11、ets(str1);printf(Enter string 2:);gets(str2);for(i=0;(str1i=str2i),3 字符串处理函数(续),共 34 页 第 19 页,8-3 字符串处理函数,六、大小写字母的转换,1 格式:strlwr(x),功能:把地址为x的字符串中所有大写字母转换成小写字母。x可以是字符数组或字符指针,也可以是字符串常量。调用形式:strlwr(x);,2 格式:strupr(x),功能:把地址为x的字符串中所有小写字母转换成大写字母。x可以是字符数组或字符指针,也可以是字符串常量。调用形式:strupr(x);,3 字符串处理函数(完),共 34 页
12、 第 20 页,8-2 字符数组,一、二维字符数组的定义,如:char a25,b37;,与二维数值数组定义相同,但数据类型为char,4 二维字符数组,共 34 页 第 21 页,8-2 字符数组,二、二维字符数组的初始化,可以在定义的同时初始化,如:char a38=“str1“,”str2”,”string3”;char b 6=“s1“,”s2”,”str3”;,二维字符数组初始化,4 二维字符数组(续),二维字符数组初始化在内存的存储,共 34 页 第 22 页,8-2 字符数组,三、二维字符数组的引用,如:(1)for(i=0;i3;i+)printf(“%sn”,ai);(2)f
13、or(i=0;i3;i+)printf(“%cn”,aii);(3)for(i=0;i3;i+)printf(“%sn”,对于二维字符数组,每行可以看做一个字符数组。数组名ai。可以用ai引用i行的字符串,也可以用aij引用i行j列的字符。,4 二维字符数组(完),输出:(1)str1(2)s(3)tr1 str2 t r2 strinf3 r ing3,共 34 页 第 23 页,#include#include void main()char string 100,t;int i,j,n;gets(string);n=strlen(string);for(i=0;i stringj+1)t
14、=stringj;stringj=stringj+1;stringj+1=t;puts(string);,4 应用实例,例11 输入一行字符,将其中的每个字符从小到大排列后输出。,共 34 页 第 24 页,例12 输入五个单词,请将它们按从小到大的顺序排列后输出。#include#include void main()char str 520,t20;int i,j,n;printf(Enter string:n);for(i=0;i 0)strcpy(t,strj);strcpy(strj,strj+1);strcpy(strj+1,t);printf(Result:n);for(i=0;
15、i5;i+)puts(stri);,4 应用实例(续),共 34 页 第 25 页,例13 任意输入一个3位整数,取其各位数字的和,再取这个和被7除的余数,输出余数对应的星期(英文单词)。如:输入123,(1+2+3)%7=6,则输出saturday。对3位整数n,拆分其百、十和个位的方法:百位:i=n/100;十位:j=n/10%10;个位:k=n%10;,4 应用实例(续),共 34 页 第 26 页,例13:#include“stdio.h”main()char week79=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
16、;int i,j,k,a,n;do printf(Please input a number:n);scanf(%d,4 应用实例(续),共 34 页 第 27 页,#include“stdio.h”#include“string.h”void main()char str80,c;int i,j,n;printf(Enter string:);gets(str);n=strlen(str);for(i=0,j=n-1;ij;i+,j-)c=stri;stri=strj;strj=c;printf(Result:);puts(str);,4 应用实例,例14 输入一行字符串,将其反序后再输出。
17、,共 34 页 第 28 页,#include“stdio.h”#include“string.h”void main()char str180,str280,str80;int i,j,n;printf(Enter string1:);gets(str1);printf(Enter string2:);gets(str2);n=0;for(i=0,j=0;str1i!=0,4 应用实例,例15 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。,共 34 页 第 29 页,#include#include void main()int length;char line100;gets(line);length=0;while(linelength!=0)length+;printf(”String length=%dn”,length);,例16 求字符串的长度根据字符串中 0 的位置来计算字符串长度。若:数组中第 i 个元素为0,则,串长=i。,length=7,4 应用实例,