您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 全国计算机二级C语言程序设计讲义 字符数组
第9讲字符数组一、字符数组的定义二、字符数组的初始化三、字符数组的输入与输出四、字符串函数一、字符数组的定义字符数组:用来存放字符型数据的数组。格式:char数组名[常量表达式],···;char数组名[常量表达式1][常量表达式2],···注意:•字符数组的定义、引用、初始化遵循“数组”的规定。•在字符数组中,每一个元素只能存放一个字符。例:chara[10],b[30];chars[10][20],h[20][100];•二维字符数组,可以看作是一个字符串数组。二、字符数组的初始化字符数组的赋值要符合数组的要求,除了在定义时初始化可以用字符串赋初值,其余只能一个元素一个元素地赋值。1)给所有元素赋初值:例chars1[7]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};chars2[]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};!gnirts存储形式为:1、一维字符数组初始化例chars3[8]={’s’,’t’,’r’,’i’,’n’,’g’,’!’,’\0’};chars4[8]={string!};chars5[8]=string!;存储形式为:\0!gnirts•C语言中,规定了一个“字符串结束标记”,以字符’\0’代表。说明:•在字符数组中,并不要求它最后的一个字符为“\0”,也可以没有“\0”。例:chars[5]=“China”;也是合法的•字符串在实际存储时,系统会自动的在其尾部添加一个结束标志’\0’。•‘\0’代表ASCII码为0的字符,是一个空操作符,表示什么也不干。2)给部分元素赋初值:例:chars1[9]={’C’,’h’,’i’,’n’,’a’,’!’};chars2[9]={’C’,’h’,’i’,’n’,’a’,’!’,’\0’};chars3[9]={”China!”};chars4[9]=“China!”;存储形式为:\0\0\0!anihC2、二维字符数组初始化二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式例:charname[2][10]={{’J’,’o’,’h’,’n’,’\0’},{’M’,’a’,’r’,’r’,’y’,’\0’}};charname[2][10]={{”John”},{”Marry”}};charname[2][10]={”John”,”Marry”};这三种方法效果一样。三、字符数组的输入与输出1.利用格式符%c逐个输入、输出字符:例:charstr[10];inti;for(i=0;i9;i++)scanf(%c,&str[i]);for(i=0;i9;i++)printf(%c,str[i]);2.利用格式符%s,可以一次输入、输出字符串。例:charstr[10];scanf(%s,str);printf(%s\n,str);%s:遇第一个空白符(空格、Tab、回车)结束输入,遇第一个‘\0’结束输出。输入:program输出:program例:chars1[10],s2[15];scanf(%s%s,s1,s2);printf(%s%s\n,s1,s2);输入:programC输出:programC输入:Howareyou输出:Howarescanf函数虽然给多个字符的输入提供了简便的方法,但对于有空格的字符串的输入却有限制。3.利用字符串输入输出函数C语言要求在使用字符串函数时,要包含头文件stdio.h1、字符串输入函数gets();作用:是将一个字符串输入到字符数组中,当遇到第一个回车时结束输入格式:gets(字符数组名);gets()函数同scanf()函数一样,在读入一个字符串后,系统自动在字符串后加上一个字符串结束标志’\0’。注意:1.函数gets()只能一次输入一个字符串。2.函数gets()可以读入包含空格和TAB的全部字符,直到遇到回车为止。使用格式符“%s”的函数scanf(),以空格、TAB或回车作为一段字符串的间隔符或结束符,所以含有空格或TAB的字符串要用gets()函数输入。例:函数gets()与scanf()的区别#includestdio.hmain(){charstr1[20],str2[20];gets(str1);scanf(%s,str2);printf(str1:%s\n,str1);printf(str2:%s\n,str2);}输入:programCprogramC输出:str1:programCstr2:program2、字符串输出函数puts()作用:将一个字符串(以’\0’结束的字符序列)输出。格式:puts(字符数组名);或puts(字符串);注意:1.函数puts()一次只能输出一个字符串。2.函数puts()可以输出转义字符。3.函数puts()输出字符串后自动换行。printf()函数可以同时输出多个字符串,并且能灵活控制是否换行。所以printf()函数比puts()函数更为常用。例:函数puts()与printf()的区别#includestdio.hmain(){charstr1[]=student,str2[]=teacher;puts(str1);puts(str2);printf(%s,str1);printf(%s\n%s,str1,str2);}四、字符串函数C语言提供了很多字符串操作函数,其对应的头文件为string.h1.测字符串长度函数strlen引用形式:strlen(字符数组)作用:strlen()是测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0’的个数)。例:charstr[12]={“computer”};printf(“%d”,strlen(str));printf(“%d”,strlen(“computer”));输出的结果都是8例:函数strlen()的使用。#includestdio.h#includestring.hmain(){inti;charstr1[20],str2[20];gets(str1);gets(str2);for(i=0;str2[i]!='\0';i++);printf(%s:%d\n,str1,strlen(str1));printf(%s:%d\n,str2,i);printf(%s:%d\n,“Goodluck,strlen(“Goodluck));}输入:GoodluckGoodluck输出:Goodluck:9Goodluck:9Goodluck:9这两句的功能等同于函数strlen(),i返回串长2.字符串拷贝函数strcpy引用形式:strcpy(字符数组1,字符串2)作用:将字符串2复制到字符数组1中。注意:(1)字符数组1必须足够大,以便容纳字符串2的内容。(2)字符串2可以是字符数组名或者字符串常量。当字符串2为字符数组名时,只复制第一个’\0’前面的内容(含’\0’),其后内容不复制。例:函数strcpy()的使用。main(){inti;charstr1[20],str2[]=“Goodluck;charstr3[20],str4[]=“Goodluck;strcpy(str1,str2);for(i=0;str4[i]!='\0';i++)str3[i]=str4[i];str1[i]='\0';printf(str1:%s\tstr2:%s\n,str1,str2);printf(str3:%s\tstr4:%s\n,str3,str4);}输出:str1:Goodluckstr2:Goodluckstr3:Goodluckstr4:Goodluck这两句的功能等同于函数strcpy()3.字符串连接函数strcat引用形式:strcat(字符数组1,字符串2)作用:将字符串2的内容复制连接在字符数组1的后面,其返回值为字符数组1的地址。注意:(1)字符数组1不能是字符串常量,并且必须足够大,以便可以继续容纳字符串2的内容。(2)连接前字符数组1的’\0’将被字符串2覆盖,连接后生成的新的字符串的最后保留一个’\0’。#includestring.hmain(){charstr1[12]={“Good”};charstr2[]={“luck!”};printf(“%s”,strcat(str1,str2));}例:函数strcat()的使用。其状态如下:输出:Goodluck!Good\0luck!\0Goodluck!\0str1str2str14.字符串比较函数strcmp引用形式:strcmp(字符串1,字符串2)作用:比较字符串1和字符串2。两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不同或者遇见’\0’为止。如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符的ASCII码值的差,即字符串1大于字符串2时函数值为正,否则为负。例:函数strcmp()的使用。main(){charstr1[]=abc,str2[]=abc;charstr3[]=abc,str4[]=abc;inti=0;while(str3[i]==str4[i]&&str3[i]!='\0')i++;i=str3[i]-str4[i];printf(“str1&str2:%d\n,strcmp(str1,str2));printf(str3&str4:%d\n,i);}输出:str1&str2:0str3&str4:0这两句的功能等同于函数strcmp()5.strlwr(字符串)strlwr()的作用是将字符串中大写字母转换成小写字母。6.strupr(字符串)strupr()的作用是将字符串中小写字母转换成大写字母。大小写转换函数:例:编写用户登录程序#includestring.hmain(){charusername[10],name[10]=zhangsan;gets(username);if(strcmp(username,name))printf(Usernamearewrong!\n);elseprintf(Youareright!\n);puts(username);}例:有3个英文字符组成的字符串,要求按照英文字母顺序输出。#includestring.hmain(){charname[3][20]={John,“Jan,Anny};charstr[20];inti;for(i=0;i3;i++)/*字符串中所有字符转换为小写字母*/strlwr(name[i]);/*按照英文字母顺序排序*/if(strcmp(name[0],name[1])0){strcpy(str,name[0]);strcpy(name[0],name[1]);strcpy(name[1],str);}if(strcmp(name[0],name[2])0){strcpy(str,name[0]);strcpy(name[0],name[2]);strcpy(name[2],str);}if(strcmp(name[1],name[2])0){strcpy(str,name[1]);strcpy(name[1],name[2]);strcpy(name[2],str);}for(i=0;i3;i++)printf(%s\n,name[i]);}
本文标题:全国计算机二级C语言程序设计讲义 字符数组
链接地址:https://www.777doc.com/doc-3929061 .html