C语言程序设计第八讲数组二8.4字符数组和字符串C语言中没有字符串变量的概念,对字符串变量的处理是通过字符型数组或字符型指针实现的。定义8.4.1字符数组的初始化逐个字符赋值例charc[10],ch[3][4];例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐个字符赋值ch[1]ch[2]ch[3]ch[4]例staticcharch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐个字符赋值ch[1]ch[2]ch[3]ch[4]例staticcharch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]第八讲数组(二)用字符串常量C语言程序设计第八讲数组二例staticchardiamond[][5]={{'.','.','*'},{'.','*','.','*'},{'*','.','.','.','*'},{'.','*','.','*'},{'.','.','*'}};二维字符数组初始化..*\0\0.*.*\0*...*.*.*\0..*\0\0diamond[0]diamond[1]diamond[2]diamond[3]diamond[4]例staticcharfruit[][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\0C语言程序设计第八讲数组二例输出一个字符串#includestdio.hmain(){charc[10]={'I','','a','m','',‘h',‘a',‘p',‘p','y'};inti;for(i=0;i10;i++)printf(%c,c[i]);printf(\n);}Iamhppy0123456789aC语言程序设计第八讲数组二8.4.2字符串字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:‘\0’例“hello”共5个字符,在内存占6个字节字符串长度5hello\01041011081081110内存存放字符ASCII码C语言程序设计第八讲数组二字符串的输入输出逐个字符I/O:%c整个字符串I/O:%s例用%cmain(){charstr[5];inti;for(i=0;i5;i++)scanf(“%c”,&str[i]);for(i=0;i5;i++)printf(“%c”,str[i]);}例用%smain(){charstr[5];scanf(“%s”,str);printf(“%s”,str);}用字符数组名,不要加&输入串长度数组长度遇空格或回车结束自动加‘\0’用字符数组名,遇‘\0’结束C语言程序设计第八讲数组二例main(){chara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);}例main(){chara[]=“Hello”;printf(“%s”,&a[1]);}结果:Hello#-=*hello02314结果:ello用“%s”输出时,遇‘\0’结束C语言程序设计第八讲数组二main(){chara[]={'h','e','l','\0','l','o','\0'};printf(%s,a);}例输出:helhel\0lo\0数组中有多个‘\0’时,遇第一个结束C语言程序设计第八讲数组二main(){inti;chara[5];scanf(%s,a);for(i=0;i5;i++)printf(%c,a[i]);}运行情况:(1)若输入hel,正常(2)若输入hell,正常(3)若输入hello,用%s输出时,有潜在危险hel\0hell\0hello输入字符串长度数组长度C语言程序设计第八讲数组二例字符串输入举例How\0are\0you?\0#includestdio.hmain(){chara[15],b[5],c[5],d[15];scanf(%s%s%s,a,b,c);printf(a=%s\nb=%s\nc=%s\n,a,b,c);scanf(%s,d);printf(“d=%s\n,d);}输入:Howareyou?输出:a=Howb=arec=you?scanf中%s输入时,遇空格或回车结束输入:Howareyou?输出:d=HowC语言程序设计第八讲数组二例若准备将字符串“Thisisastring.”记录下来,错误的输入语句为:(A)for(k=0;k17;k++)s[k]=getchar();(B)while((c=getchar())!=‘\n’)s[k++]=c;(C)scanf(“%20s”,s);C语言程序设计第八讲数组二8.4.3常用的字符串处理函数包含在头文件string.h字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,自动换行)说明:字符数组必须以‘\0’结束字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’说明:输入串长度应小于字符数组维数例#include“string.h”#include“stdio.h”main(){charstring[80];printf(“Inputastring:”);gets(string);puts(string);}输入:Howareyou?输出:Howareyou?C语言程序设计第八讲数组二字符串连接函数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!”};()str2=str1;()C语言程序设计第八讲数组二例strcpy与strcat举例#includestring.h#includestdio.hvoidmain(){chardestination[25];charblank[]=,c[]=C++,turbo[]=Turbo;strcpy(destination,turbo);strcat(destination,blank);strcat(destination,c);printf(%s\n,destination);}TurboC++TrboC++0123456789u\024…….Trbo0123456789u\024…….…….Trbo\00123456789u24…….…...C语言程序设计第八讲数组二字符串比较函数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”;答案:131C语言程序设计第八讲数组二#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);}例strcmp与strlen举例Howareyou?Hello!Len1=6,Len2=12,Len3=18C语言程序设计第八讲数组二例比较staticinta[2][3]={{5,6},{7,8}};与staticinta[2][3]={5,6,7,8};560780567800例inta[][10];floatf[2][]={1.2,2.2};例inta[5];a={2,4,6,8,10};例inta[10];floati=3;a[i]=10;例charname[0];floatweight[10.3];intarray[-100];例charstr[]=“Hello”;charstr[]={‘H’,‘e’,‘l’,‘l’,‘o’};hello02314hello\0023145C语言程序设计第八讲数组二小结1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。2.数组可以是一维的,二维的或多维的。3.数组类型说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。4.对数组的赋值可以用数组初始化赋值、输入函数动态赋值和赋值语句赋值三种方法实现。对数值数组不能用赋值语句整体赋值,而必须用循环语句逐个对数组元素进行操作。C语言程序设计第八讲数组二1.编一个程序,将两个字符串连接起来,不用strcat函数。2.在一批名字中查找指定的名字。3.编写程序,把键盘输入的字符串中的数字字符删除,然后输出该字符串。作业与上机