您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > chap07-3数 组(3)
Chap7数组(3)字符数组要求掌握字符数组定义、初始化字符串结束标志‘\0’字符数组的输入、输出字符串的连接、复制7.3.2一维字符数组字符串的存储和运算可以用一维字符数组实现一维字符数组的定义、引用、初始化与其他类型的一维数组一样。charstr[80];定义一个含有80个字符型元素的数组strchart[5]={'H','a','p','p','y'};初始化数组tt[0]t[1]t[4]tHappy输出数组t的所有元素for(i=0;i5;i++)putchar(t[i]);一维字符数组chart[5]={'H','a','p','p','y'};staticchars[6]={'H','a','p','p','y'};staticchars[6]={'H','a','p','p','y',0};0代表字符'\0',也就是ASCII码为0的字符staticchars[6]={'H','a','p','p','y','\0'};s[0]s[1]s[5]sHappy\0t[0]t[1]t[4]tHappy7.3.3字符串字符串常量用一对双引号括起来的字符序列一个字符串结束符'\0'Happy6个字符'H''a’'p’'p’'y''\0'有效字符字符串结束符字符串的有效长度:有效字符的个数字符串与一维字符数组字符串:一个特殊的一维字符数组把字符串放入一维字符数组(存储)对字符串的操作===对字符数组的操作1.字符串的存储-数组初始化字符串可以存放在一维字符数组中staticchars[6]={'H','a','p','p','y','\0'};字符数组初始化:用字符串常量staticchars[6]={Happy};staticchars[6]=Happy;数组长度=字符串的有效长度+1s[0]s[1]s[5]sHappy\01.字符串的存储-数组初始化将一个字符串赋值给一个字符数组,只能用在赋初值的情况下,不能用在赋值语句中.例如:charstr[11];str=“Iamhappy”;×字符串的存储autochars[80]=Happy;字符串遇'\0'结束第一个'\0'前面的所有字符和'\0'一起构成了字符串Happy”'\0'之后的其他数组元素与该字符串无关s[0]s[1]s[5]sHappy\0??字符串由有效字符和字符串结束符'\0'组成课堂练习1.下列选项中属于C语言中字符常量的是()A.'abc'B.\nC.'a'D.'a\0'2.下列选项中属于C语言中字符串常量的是()A.abcB.ABCC.'abc'D.'a'3.字符串ABC在内存占用的字节数是()A.3B.4C.6D.84.字符型常量在内存中存放的是()A.ASCII代码值B.二进制代码值C.八进制代码值D.十进制代码值√√√√例charfruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};二维字符数组初始化fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\0例子2.对字符串的操作把字符串放入一维字符数组(存储)对字符串的操作===对字符数组的操作普通字符数组:数组元素的个数是确定的,一般用下标控制循环字符串:没有显式地给出有效字符的个数,只规定在字符串结束符'\0'之前的字符都是字符串的有效字符,一般用结束符'\0'来控制循环循环条件:s[i]!='\0'计算字符串的有效长度,并输出该字符串。字符串的有效长度:有效字符的个数数组中第一个'\0'前面的字符个数例7-10计算字符串的有效长度s[0]s[1]s[5]sHappy\0??#includestdio.hintmain(void){inti=0,len;charstr[80]=Happy;/*初始化*/for(i=0;str[i]!='\0';i++);len=i;printf(len=%d\n,len);for(i=0;str[i]!='\0';i++)/*输出字符串*/putchar(str[i]);return0;}例7-10源程序s[0]s[1]s[5]sHappy\0??循环条件len=5Happyfor(i=0;s[i]!='\0';i++)putchar(s[i]);for(i=0;i80;i++)putchar(s[i]);for(i=0;ilen;i++)putchar(s[i]);输出字符串s[0]s[1]s[5]sHappy\0??√√3.字符串的存储-赋值和输入把字符串放入一维字符数组(存储)对字符串的操作===对字符数组的操作存储赋值s[0]='a';s[1]='\0';等价于staticchars[6]=a;a2个字符'a'和'\0''a'1个字符常量区分a和'a'字符串的输入输入'\0'代表空操作,无法输入输入时,设定一个输入结束符将输入结束符转换为字符串结束符'\0'输入一个以回车结束的字符串(少于80个字符),统计其中数字字符的个数。分析:数组长度取上限80以'\n'做为输入结束符例7-11统计字符#includestdio.hintmain(void){intcount,i;charstr[80];printf(“Enterastring:);i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';/*输入结束符=字符串结束符*/count=0;for(i=0;str[i]!='\0';i++)if(str[i]='9'&&str[i]='0')count++;printf(count=%d\n,count);return0;}例7-11源程序字符串的输入Enterastring:It's512count=3如何改变输入结束符?能省略str[i]='\0'吗?012345678sIt's512\0??例7-9进制转换#includestdio.hintmain(void){inti,n;chars[10];printf(“Enterastring:);/*输入字符串*/i=0;while((s[i]=getchar())!='\n')i++;s[i]='\0';n=0;/*将字符串转换为整数*/for(i=0;s[i]!='\0';i++)if(s[i]='9'&&s[i]='0')n=n*10+(s[i]-'0');elsebreak;printf(digit=%d\n,n);return0;}Enterastring:123digit=1230123s123\0??进制转换方法n=0;for(i=0;s[i]!='\0';i++)if(s[i]='9'&&s[i]='0')n=n*10+(s[i]-'0');elsebreak;0123s123\0??is[i]s[i]-'0'n=n*10+(s[i]-'0')0'1'10*10+1=11'2'21*10+2=122'3'312*10+3=1233'\0'Enterastring:1#2#3digit=字符串小结字符串:一个特殊的一维字符数组'\0'把字符串放入一维字符数组(存储)数组长度足够字符数组初始化:staticchars[80]=Happy;赋值:s[0]='a';s[1]='\0';输入:输入结束符==字符串结束符'\0'i=0;while((s[i]=getchar())!='\n')i++;s[i]='\0';s[0]s[1]s[5]sHappy\0??把字符串放入一维字符数组(存储)对字符串的操作===对字符数组的操作只针对字符串的有效字符和字符串结束符'\0'检测for(i=0;s[i]!='\0';i++)putchar(s[i]);s[0]s[1]s[5]sHappy\0??包含在头文件string.h字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以‘\0’结束字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’说明:输入串长度应小于字符数组维数例#includestdio.hmain(){charstring[80];printf(“Inputastring:”);gets(string);puts(string);}输入:Howareyou?输出:Howareyou?常用的字符串处理函数(1)scanf(“%s”,str);gets(str);区别是scanf取不到空格字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最后加‘\0’字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大拷贝时‘\0’一同拷贝不能使用赋值语句为一个字符数组赋值例charstr1[20],str2[20];str1={“Hello!”};()strcpy(str1,“Hello!”);()str2=str1;()strcpy(str2,str1);()常用的字符串处理函数(2)字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:自左向右逐个字符比较(按ASCII码大小比较),直到遇到不同字符或‘\0’为止返值:返回int型整数,a.若字符串1字符串2,返回负整数b.若字符串1字符串2,返回正整数c.若字符串1==字符串2,返回零说明:字符串比较不能用“==”,必须用strcmp字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括‘\0’在内例对于以下字符串,strlen(s)的值为:(1)chars[10]={'A','\0','B','C','\0','D'};(2)chars[]=\t\v\\\0will\n;(3)chars[]=\x69\082\n;答案:131常用的字符串处理函数(3)#includestring.h#includestdio.hmain(){charstr1[]=”Hello!,str2[]=”Howareyou?”,str[20];intlen1,len2,len3;len1=strlen(str1);len2=strlen(str2);if(strcmp(str1,str2)0){strcpy(str,str1);strcat(str,str2);}elseif(strcmp(str1,str2)0){strcpy(str,str2);strcat(str,str1);}elsestrcpy(str,str1);len3=strlen(str);puts(str);printf(”Len1=%d,Len2=%d,Len3=%d\n”,len1,len2,len3);}Howareyou?Hello!Len1=6,Len2=12,Len3=18例strcmp与strlen举例将小的字符串连接到大的字符串的后面字符串字母转换函数strlwr格式:strlwr(字符数组)功能:把字符数组中的大写字母转换成小写字母返值:返回字符数组的首地址字符串字母转换函数strupr格式:strupr(字符数组)功能:把字符数组中的小写字母转换成大写字母返值:返回字符数组的首地址常用的字符串处理函数(4)例:将5个同学的姓名从小到大排序并输出#includestdio.h#includestring.hvoidma
本文标题:chap07-3数 组(3)
链接地址:https://www.777doc.com/doc-3393075 .html