武汉大学C语言程序设计第14讲(字符数组)(2012级)_第1页
武汉大学C语言程序设计第14讲(字符数组)(2012级)_第2页
武汉大学C语言程序设计第14讲(字符数组)(2012级)_第3页
武汉大学C语言程序设计第14讲(字符数组)(2012级)_第4页
武汉大学C语言程序设计第14讲(字符数组)(2012级)_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十四讲Begin:第八章数组字符数组一、字符数组的定义字符数组:用来存放字符型数据的数组。格式:

char数组名[常量表达式],···;

char数组名[常量表达式1][常量表达式2],···注意:字符数组的定义、引用、初始化遵循“数组”的规定。8.3.1字符数组的定义、初始化和引用

在字符数组中,每一个元素只能存放一个字符。例:

chara[10],b[30];

chars[10][20],h[20][100];

二维字符数组,可以看作是一个字符串数组。8.3.1字符数组的定义、初始化和引用

二、字符数组的初始化

字符数组的赋值要符合数组的要求,除了在定义时初始化可以用字符串赋初值,其余只能一个元素一个元素地赋值。1)给所有元素赋初值:例

chars1[7]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};chars2[]={‘s’,’t’,’r’,’i’,’n’,’g’,’!’};!gnirts存储形式为:1、一维字符数组初始化8.3.1字符数组的定义、初始化和引用

chars3[8]={’s’,’t’,’r’,’i’,’n’,’g’,’!’,’\0’};chars4[8]={"string!"};

chars5[8]="string!";存储形式为:\0!gnirtsC语言中,规定了一个“字符串结束标记”,以字符’\0’代表。说明:8.3.1字符数组的定义、初始化和引用

在字符数组中,并不要求它最后的一个字符为“\0”,也可以没有“\0”。

例:chars[5]=“China”;

也是合法的字符串在实际存储时,系统会自动的在其尾部添加一个结束标志’\0’。‘\0’代表ASCII码为0的字符,是一个空操作符,表示什么也不干。8.3.1字符数组的定义、初始化和引用

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!anihC8.3.1字符数组的定义、初始化和引用

2、二维字符数组初始化二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式例:

charname[2][10]={{’J’,’o’,’h’,’n’,’\0’},{’M’,’a’,’r’,’r’,’y’,’\0’}};

charname[2][10]={{”John”},{”Marry”}};

charname[2][10]={”John”,”Marry”};这三种方法效果一样。8.3.1字符数组的定义、初始化和引用

1.利用格式符%c逐个输入、输出字符:例:charstr[10];inti;for(i=0;i<9;i++)

scanf("%c",&str[i]);for(i=0;i<9;i++)

printf("%c",str[i]);8.3.2字符数组的输入输出

2.利用格式符%s,可以一次输入、输出字符串。例:charstr[10];

scanf("%s",str);

printf("%s\n",str);%s:遇第一个空白符(空格、Tab、回车)结束输入,遇第一个‘\0’结束输出。输入:program输出:program

8.3.2字符数组的输入输出

例:chars1[10],s2[15];

scanf("%s%s",s1,s2);

printf("%s%s\n",s1,s2);输入:programC输出:programC输入:Howareyou输出:Howare

scanf函数虽然给多个字符的输入提供了简便的方法,但对于有空格的字符串的输入却有限制。8.3.2字符数组的输入输出

注意:

scanf函数参数要求的是地址,故直接用字符数组名进行操作。字符数组名表示的是该数组的首地址,因此使用格式符%s可以实现字符串整体的输入和输出。3.利用字符串输入输出函数C语言要求在使用字符串函数时,要包含头文件stdio.h1、字符串输入函数gets();作用:是将一个字符串输入到字符数组中,当遇到第一个回车时结束输入格式:gets(字符数组名);

gets()函数同scanf()函数一样,在读入一个字符串后,系统自动在字符串后加上一个字符串结束标志’\0’。8.3.2字符数组的输入输出

注意:

函数gets()只能一次输入一个字符串。函数gets()可以读入包含空格和TAB的全部字符,直到遇到回车为止。使用格式符“%s”的函数scanf(),以空格、TAB或回车作为一段字符串的间隔符或结束符,所以含有空格或TAB的字符串要用gets()函数输入。8.3.2字符数组的输入输出

例:函数gets()与scanf()的区别#include<stdio.h>main(){charstr1[20],str2[20];gets(str1);scanf("%s",str2);printf("str1:%s\n",str1);printf("str2:%s\n",str2);}输入:programCprogramC输出:str1:programCstr2:program8.3.2字符数组的输入输出

2、字符串输出函数puts()

作用:将一个字符串(以’\0’结束的字符序列)输出。

格式:puts(字符数组名);或puts(字符串);8.3.2字符数组的输入输出

注意:

函数puts()一次只能输出一个字符串。函数puts()可以输出转义字符。函数puts()输出字符串后自动换行。printf()函数可以同时输出多个字符串,并且能灵活控制是否换行。所以printf()函数比puts()函数更为常用。8.3.2字符数组的输入输出

例:函数puts()与printf()的区别#include<stdio.h>main(){charstr1[]="student",str2[]="teacher";puts(str1);puts(str2);printf("%s",str1);printf("%s\n%s",str1,str2);}8.3.2字符数组的输入输出

C语言提供了很多字符串操作函数,其对应的头文件为<string.h>1.测字符串长度函数strlen

引用形式:strlen(字符数组)

作用:strlen()是测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0’的个数)。8.3.3字符串处理函数例:

charstr[12]={“computer”};

printf(“%d”,strlen(str));

printf(“%d”,strlen(“computer”));输出的结果都是88.3.3字符串处理函数例:函数strlen()的使用。#include<stdio.h>#include<string.h>main(){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",“Good

luck",strlen(“Goodluck"));}输入:GoodluckGoodluck输出:Goodluck:9Goodluck:9Goodluck:9这两句的功能等同于函数strlen(),i返回串长8.3.3字符串处理函数2.字符串拷贝函数strcpy

引用形式:strcpy(字符数组1,字符串2)

作用:将字符串2复制到字符数组1中。注意:(1)字符数组1必须足够大,以便容纳字符串2的内容。(2)字符串2可以是字符数组名或者字符串常量。当字符串2为字符数组名时,只复制第一个’\0’前面的内容(含’\0’),其后内容不复制。8.3.3字符串处理函数其状态如下:Good

luc

k!\0

12345\0

Good

luck!\0

str2str1str18.3.3字符串处理函数输出:str1:Goodluckstr2:Goodluckstr3:Goodluckstr4:Goodluck例:函数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()8.3.3字符串处理函数3.字符串连接函数strcat

引用形式:strcat(字符数组1,字符串2)

作用:将字符串2的内容复制连接在字符数组1的后面,其返回值为字符数组1的地址。注意:(1)字符数组1不能是字符串常量,并且必须足够大,以便可以继续容纳字符串2的内容。

(2)连接前字符数组1的’\0’将被字符串2覆盖,连接后生成的新的字符串的最后保留一个’\0’。

8.3.3字符串处理函数#include<string.h>

main(){charstr1[12]={“Good”};charstr2[]={“luck!”};printf(“%s”,strcat(str1,str2));}例:函数strcat()的使用。其状态如下:输出:Goodluck!Good

\0

luck!\0

Good

luck!\0

str1str2str18.3.3字符串处理函数4.字符串比较函数strcmp

引用形式:strcmp(字符串1,字符串2)

作用:比较字符串1和字符串2。两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不同或者遇见’\0’为止。如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符的ASCII码值的差,即字符串1大于字符串2时函数值为正,否则为负。8.3.3字符串处理函数例:函数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()8.3.3字符串处理函数5.strlwr(字符串)

strlwr()的作用是将字符串中大写字母转换成小写字母。6.strupr(字符串)

strupr()的作用是将字符串中小写字母转换成大写字母。大小写转换函数:8.3.3字符串处理函数例:编写用户登录程序#include"string.h"main(){charusername[10],name[10]="zhangsan";

gets(username); if(strcmp(username,name)) printf("Usernamearewrong!\n"); else

printf("Youareright!\n");

puts(username);}8.3.4字符数组应用实例例:有3个英文字符组成的字符串,要求按照英文字母顺序输出。#include<string.h>main(){charname[3][20]={"John",“Jan","Anny"};charstr[20];inti;

for(i=0;i<3;i++)/*字符串中所有字符转换为小写字母*/

strlwr(name[i]);/*按照英文字母顺序排序*/if(strcmp(name[0],name[1])>0){strcpy(str,name[0]);strcpy(name[0],name[1]);strcpy(name[1],str);}8.3.4字符数组应用实例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;i<3;i++)

printf("%s\n",name[i]);}8.3.4字符数组应用实例例:

输入一行字符,统计其中有多少个单词,单词之间用空格分隔。分析:单词的数目可通过空格出现的次数确定,连续空格按一个处理,一行开头的空格不统计。程序中用num统计单词的个数,用word作为判断是否单词的标志,word=0表示未出现单词,word=1表示出现单词。eg:Iamateacher8.3.4字符数组应用实例例当前字符=‘’?(1)是:未出现新单词,word=0(2)否:①前一个字符为‘

’(word=0),新单词出现,word=1,num++②前一个字符为非‘

(word=1),未出现新单词例#include〈stdio.h〉voidmain(){charstr[100],c;inti,num,word;

num=word=0;

gets(str);/*输入该行字符*/for(i=0;(c=str[i])!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论