C课件语言第09讲

上传人:夏** 文档编号:579249944 上传时间:2024-08-26 格式:PPT 页数:39 大小:550.03KB
返回 下载 相关 举报
C课件语言第09讲_第1页
第1页 / 共39页
C课件语言第09讲_第2页
第2页 / 共39页
C课件语言第09讲_第3页
第3页 / 共39页
C课件语言第09讲_第4页
第4页 / 共39页
C课件语言第09讲_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《C课件语言第09讲》由会员分享,可在线阅读,更多相关《C课件语言第09讲(39页珍藏版)》请在金锄头文库上搜索。

1、8/26/20241 Program Design in C LanguagePage第九章第九章字符串字符串字符数组字符数组指向字符串的指针变量指向字符串的指针变量字符串处理函数字符串处理函数8/26/20242 Program Design in C LanguagePage一、一、字符数组的定义字符数组的定义字符数组:用来存放字符型数据的数组字符数组:用来存放字符型数据的数组。格式:格式:char数组名数组名常量表达式常量表达式,;char数组名数组名常量表达式常量表达式1常量表达式常量表达式2,注意:注意:字符数组的定义、引用、初始化遵循字符数组的定义、引用、初始化遵循“数组数组”的规

2、定。的规定。9.2.1 字符数组的定义、初始化和引用 8/26/20243 Program Design in C LanguagePage在字符数组中,每一个元素只能存放一个字符。在字符数组中,每一个元素只能存放一个字符。例:例: char a10,b30; char s1020,h20100; 二维字符数组,可以看作是一个字符串数组。二维字符数组,可以看作是一个字符串数组。9.2.2 字符数组的定义、初始化和引用 8/26/20244 Program Design in C LanguagePage二、二、字符数组的初始化字符数组的初始化字符数组的赋值要符合数组的要求,除了在定义时字符数组

3、的赋值要符合数组的要求,除了在定义时初始化可以用字符串赋初值,其余只能一个元素一个元初始化可以用字符串赋初值,其余只能一个元素一个元素地赋值。素地赋值。1)给所有元素赋初值:)给所有元素赋初值:例例 char s17=s,t,r,i,n,g,!; char s2 =s,t,r,i,n,g,!;!gnirts存储形式为:存储形式为:1、一维字符数组初始化、一维字符数组初始化9.2.3 字符数组的定义、初始化和引用 8/26/20245 Program Design in C LanguagePage例例chars38=s,t,r,i,n,g,!,0;chars48=string!;chars58

4、=string!;存储形式为:存储形式为:0!gnirtsC语言中,规定了一个语言中,规定了一个“字符串结束标记字符串结束标记”,以字符,以字符0代表。代表。说明:说明:9.2.3 字符数组的定义、初始化和引用 8/26/20246 Program Design in C LanguagePage在字符数组中,并不要求它最后的一个字符为在字符数组中,并不要求它最后的一个字符为“0”,也可以没有也可以没有“0”。例例:chars5=“China”;也是合法的也是合法的字符串在实际存储时,系统会自动的在其尾部添加一个字符串在实际存储时,系统会自动的在其尾部添加一个结束标志结束标志0。0代表代表AS

5、CII码为码为0的字符,是一个空操作符,表示的字符,是一个空操作符,表示什么也不干。什么也不干。9.2.3 字符数组的定义、初始化和引用 8/26/20247 Program Design in C LanguagePage2)给部分元素赋初值:)给部分元素赋初值:例:例:chars19=C,h,i,n,a,!;chars29=C,h,i,n,a,!,0;chars39=”China!”;chars49=“China!”;存储形式为存储形式为:000!anihC9.2.3 字符数组的定义、初始化和引用 8/26/20248 Program Design in C LanguagePage2、二

6、维字符数组初始化、二维字符数组初始化二维字符串数组的初始化,可以采用二维字符数组初始二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式化形式或者字符串初始化形式例:例:charname210=J,o,h,n,0,M,a,r,r,y,0;charname210=”John”,”Marry”;charname210=”John”,”Marry”;这三种方法效果一样。这三种方法效果一样。9.2.3 字符数组的定义、初始化和引用 8/26/20249 Program Design in C LanguagePage1.利用格式符利用格式符%c逐个输入、输出字符:逐个输入、输出字

7、符:例例:charstr10;inti;for(i=0;i9;i+)scanf(%c,&stri);for(i=0;i9;i+)printf(%c,stri);9.2.4 字符数组的输入输出 8/26/202410 Program Design in C LanguagePage2.利用格式符利用格式符%s,可以一次输入、输出字符串。可以一次输入、输出字符串。例例:charstr10;scanf(%s,str);printf(%sn,str);%s:遇第一个空白符(空格、遇第一个空白符(空格、Tab、回车)结束输入,回车)结束输入,遇第一个遇第一个0结束输出。结束输出。输入:输入:progra

8、m输出:输出:program9.2.4 字符数组的输入输出 8/26/202411 Program Design in C LanguagePage例例:chars110,s215;scanf(%s%s,s1,s2);printf(%s%sn,s1,s2);输入:输入:programC输出:输出:programC输入:输入:Howareyou输出:输出:Howarescanf函数虽然给多个字符的输入提供了简便的函数虽然给多个字符的输入提供了简便的方法,但对于有空格的字符串的输入却有限制。方法,但对于有空格的字符串的输入却有限制。9.2.4 字符数组的输入输出 注意:注意:scanf函数参数要求

9、的是地址,故直接用字符数函数参数要求的是地址,故直接用字符数组名进行操作。组名进行操作。字符数组名表示的是该数组的首地址,因此使字符数组名表示的是该数组的首地址,因此使用格式符用格式符%s可以实现字符串整体的输入和输出。可以实现字符串整体的输入和输出。8/26/202412 Program Design in C LanguagePage9.3 字符串指针变量的定义与引用 字符串常量的处理是用字符数组来实现的。也字符串常量的处理是用字符数组来实现的。也就是说,无论是否定义了字符数组,对于程序就是说,无论是否定义了字符数组,对于程序中出现的字符串,系统都会在内存中开辟一个中出现的字符串,系统都会

10、在内存中开辟一个字符数组连续存储空间来存放该字符串常量。字符数组连续存储空间来存放该字符串常量。字符串的指针:字符串的首字符地址,也就是字符串的指针:字符串的首字符地址,也就是存放字符串的字符数组的首地址。存放字符串的字符数组的首地址。字符串指针变量:通常把字符串指针变量:通常把char型指针变量称为型指针变量称为字符串指针变量。也就是说,指向字符串的指字符串指针变量。也就是说,指向字符串的指针变量等同于指向字符数组元素的指针变量,针变量等同于指向字符数组元素的指针变量,可以指向字符串中的任意一个字符。可以指向字符串中的任意一个字符。8/26/202413 Program Design in

11、C LanguagePage9.3 字符串指针变量的定义与引用 字符串指针变量的定义和初始化字符串指针变量的定义和初始化方式一:将存放字符串的字符数组名赋给字符方式一:将存放字符串的字符数组名赋给字符串指针变量,让字符串指针变量指向字符串的串指针变量,让字符串指针变量指向字符串的首字符,然后通过移动指针变量来访问字符串首字符,然后通过移动指针变量来访问字符串的其他字符。的其他字符。例如:例如:charstr=WelcometoChina!;char*p;p=str;/*等价于等价于p=&str0*/8/26/202414 Program Design in C LanguagePage9.3

12、字符串指针变量的定义与引用 字符串指针变量的定义和初始化字符串指针变量的定义和初始化方式二:在程序中定义一个字符串指针变量,方式二:在程序中定义一个字符串指针变量,并将字符串的首地址直接赋给它,然后通过移并将字符串的首地址直接赋给它,然后通过移动指针变量来访问字符串的其他字符。动指针变量来访问字符串的其他字符。例如:例如:char*p=WelcometoChina!;等价于:等价于:char*p;p=WelcometoChina!;这里的字符串指针变量这里的字符串指针变量p指向字符串的首字符,指向字符串的首字符,即第一个字符即第一个字符W。8/26/202415 Program Design

13、in C LanguagePage例例用字符串指针变量实现字符串操作用字符串指针变量实现字符串操作#includevoidmain()char*str=WelcometoChina!;printf(%sn,str);/*整体引用字符串整体引用字符串*/for(;*str!=0;str+)printf(%c,*str);/*逐个引用字符串中的字符逐个引用字符串中的字符*/printf(n);9.3 字符串指针变量的定义与引用 程序运行结果程序运行结果:WelcometoChina!WelcometoChina!8/26/202416 Program Design in C LanguagePag

14、e9.3 字符串指针变量与字符数组 字符数组是由若干个元素组成,每个元素存放一字符数组是由若干个元素组成,每个元素存放一个字符;而字符串指针变量存放的是字符串中某个字符;而字符串指针变量存放的是字符串中某一个字符的地址。一个字符的地址。赋值方式不同。字符数组只能对各个元素分别赋赋值方式不同。字符数组只能对各个元素分别赋值,而字符串指针变量只用赋给字符串的首地址值,而字符串指针变量只用赋给字符串的首地址就可以了。就可以了。例如,下面的赋值是正确的:例如,下面的赋值是正确的:char*str;str=WelcometoChina!;/*str是指针变量是指针变量*/下面的赋值是错误的:下面的赋值是

15、错误的:charstr30;str=WelcometoChina!;/*str是数组名是数组名*/8/26/202417 Program Design in C LanguagePage9.3 字符串指针变量与字符数组 字符串指针变量占用的内存要少于字符数组。字符串指针变量占用的内存要少于字符数组。例如,编译系统为下面二维字符数组的定义及初始例如,编译系统为下面二维字符数组的定义及初始化分配了化分配了36个字节的内存空间:个字节的内存空间:charstr218=Hello,WelcometoChina!;为下面两个字符串指针变量的定义及初始化分配了为下面两个字符串指针变量的定义及初始化分配了2

16、8个字节的内存空间:个字节的内存空间:char*str1=Hello,*str2=WelcometoChina;字符串指针变量的值是可以改变的,而字符数组的字符串指针变量的值是可以改变的,而字符数组的数组名永远代表该数组的首地址,它的值是不会变数组名永远代表该数组的首地址,它的值是不会变化的。化的。8/26/202418 Program Design in C LanguagePage例例将字符串将字符串str1复制到字符串复制到字符串str2#includevoidmain()charstr1=Copystring,str230;char*p1=str1,*p2=str2;while(*p1

17、!=0)*p2+=*p1+;*p2=0;printf(Stringstr2=);puts(str2);程序运行结果程序运行结果:Stringstr2=Copystring9.3 字符串指针变量与字符数组 8/26/202419 Program Design in C LanguagePage9.3 字符串指针变量作为函数参数 特点:特点:用用字字符符数数组组名名或或字字符符串串指指针针变变量量名名作作为为实实参参,向形参传递字符串的首地址;向形参传递字符串的首地址;作作为为形形参参的的字字符符数数组组或或字字符符串串指指针针变变量量本本质质上上都是字符串指针变量;都是字符串指针变量;在在被被调

18、调用用函函数数中中可可以以改改变变字字符符串串的的内内容容,在在主主调函数中可以得到改变以后的字符串。调函数中可以得到改变以后的字符串。8/26/202420 Program Design in C LanguagePage例例连接两个字符串连接两个字符串str1和和str2,连接结果放在,连接结果放在str1中中#includevoidstrlink(char*,char*);voidmain()charstr115=Hello,str2=World!;strlink(str1,str2);printf(Stringstr1=%sn,str1);voidstrlink(char*s,char

19、*t)while(*s!=0)s+;/*使使s指向字符串指向字符串str1的末尾的末尾*/while(*t!=0)*s+=*t+;/*将将str2中的字符逐个连接到中的字符逐个连接到str1的末尾的末尾*/*s=0;/*在在str1的末尾加上字符串结束标志的末尾加上字符串结束标志*/程序运行结果程序运行结果:Stringstr1=HelloWorld!9.3 字符串指针变量作为函数参数 8/26/202421 Program Design in C LanguagePage利用字符串输入输出函数利用字符串输入输出函数C语言要求在使用字符串函数时,要包含头文件语言要求在使用字符串函数时,要包含头

20、文件stdio.h1、字符串输入函数字符串输入函数gets();作用:作用:是将一个字符串输入到字符数组中,当遇是将一个字符串输入到字符数组中,当遇到第一个回车时结束输入到第一个回车时结束输入格式:格式:gets(字符数组名字符数组名);gets()函数同函数同scanf()函数一样,在读入一个函数一样,在读入一个字符串后,系统自动在字符串后加上一个字符字符串后,系统自动在字符串后加上一个字符串结束标志串结束标志0。9.4 字符串函数 8/26/202422 Program Design in C LanguagePage注意:注意:1.函数函数gets()只能一次输入一个字符串。只能一次输入

21、一个字符串。2.函数函数gets()可以读入包含空格和可以读入包含空格和TAB的全部字符,的全部字符,直到遇到回车为止。直到遇到回车为止。使用格式符使用格式符“%s”的函数的函数scanf(),以空格、以空格、TAB或回车作为一段字符串的间隔符或结束符,所以或回车作为一段字符串的间隔符或结束符,所以含有空格或含有空格或TAB的字符串要用的字符串要用gets()函数输入。函数输入。9.4 字符串函数8/26/202423 Program Design in C LanguagePage例例:函数:函数gets()与与scanf()的区别的区别#includemain()charstr120,st

22、r220;gets(str1);scanf(%s,str2);printf(str1:%sn,str1);printf(str2:%sn,str2);输入:输入:programCprogramC输出:输出:str1:programCstr2:program9.4 字符串函数8/26/202424 Program Design in C LanguagePage2、字符串输出函数字符串输出函数puts()作用:将一个字符串(以作用:将一个字符串(以0结束的字符结束的字符序列)输出。序列)输出。格式:格式:puts(字符数组名字符数组名);或或puts(字符串字符串);9.4 字符串函数8/26/

23、202425 Program Design in C LanguagePage注意:注意:1.函数函数puts()一次只能输出一个字符串。一次只能输出一个字符串。2.函数函数puts()可以输出转义字符。可以输出转义字符。3.函数函数puts()输出字符串后自动换行。输出字符串后自动换行。printf()函数可以同时输出多个字符串,并且能函数可以同时输出多个字符串,并且能灵活控制是否换行。所以灵活控制是否换行。所以printf()函数比函数比puts()函数更为常用。函数更为常用。9.4 字符串函数8/26/202426 Program Design in C LanguagePage例例:函

24、数:函数puts()与与printf()的区别的区别#includemain()charstr1=student,str2=teacher;puts(str1);puts(str2);printf(%s,str1);printf(%sn%s,str1,str2);9.4 字符串函数8/26/202427 Program Design in C LanguagePage3测字符串长度函数测字符串长度函数strlen引用形式:引用形式:strlen(字符数组字符数组)作用:作用:strlen()是测试字符串实际长度的函数,是测试字符串实际长度的函数,它的返回值是字符串中字符的个数(它的返回值是字符

25、串中字符的个数(不包含不包含00的个数的个数)。)。9.4 字符串处理函数8/26/202428 Program Design in C LanguagePage例:例:charstr12=“computer”;printf(“%d”,strlen(str);printf(“%d”,strlen(“computer”);输出的结果都是输出的结果都是89.4 字符串函数8/26/202429 Program Design in C LanguagePage例:例:函数函数strlen()的使用。的使用。#include#includemain()inti;charstr120,str220;ge

26、ts(str1);gets(str2);for(i=0;str2i!=0;i+);printf(%s:%dn,str1,strlen(str1);printf(%s:%dn,str2,i);printf(%s:%dn,“Goodluck,strlen(“Goodluck);输入:输入:GoodluckGoodluck输出输出:Goodluck:9Goodluck:9Goodluck:9这两句的功能等同于函数这两句的功能等同于函数strlen(),i返回串长返回串长9.4 字符串函数8/26/202430 Program Design in C LanguagePage4字符串拷贝函数字符串拷贝

27、函数strcpy引用形式:引用形式:strcpy(字符数组字符数组1,字符串,字符串2)作用:将字符串作用:将字符串2复制到字符数组复制到字符数组1中。中。注意:注意:(1)字符数组字符数组1必须足够大,以便容纳字符串必须足够大,以便容纳字符串2的内容。的内容。(2)字符串字符串2可以是字符数组名或者字符串常可以是字符数组名或者字符串常量。当字符串量。当字符串2为字符数组名时,只复制第一个为字符数组名时,只复制第一个0前面的内容(含前面的内容(含0),其后内容不复),其后内容不复制。制。9.4 字符串函数8/26/202431 Program Design in C LanguagePage例

28、:例:函数函数strcpy()的使用。的使用。main()inti;charstr120,str2=“Goodluck;charstr320,str4=“Goodluck;strcpy(str1,str2);for(i=0;str4i!=0;i+)str3i=str4i;str4i=0;printf(str1:%ststr2:%sn,str1,str2);printf(str3:%ststr4:%sn,str3,str4);输出输出:str1:Goodluckstr2:Goodluckstr3:Goodluckstr4:Goodluck这两句的功能等同于函数这两句的功能等同于函数strcpy(

29、)9.4 字符串函数8/26/202432 Program Design in C LanguagePage5字符串连接函数字符串连接函数strcat引用形式:引用形式:strcat(字符数组字符数组1,字符串,字符串2)作用:作用:将字符串将字符串2的内容复制连接在字符数组的内容复制连接在字符数组1的后面,其返回值为字符数组的后面,其返回值为字符数组1的地址。的地址。注意:注意:(1)字符数组)字符数组1不能是字符串常量,并且必须足不能是字符串常量,并且必须足够大,以便可以继续容纳字符串够大,以便可以继续容纳字符串2的内容。的内容。(2)连接前字符数组)连接前字符数组1的的0将被字符串将被字

30、符串2覆覆盖,连接后生成的新的字符串的最后保留一个盖,连接后生成的新的字符串的最后保留一个0。9.4 字符串函数8/26/202433 Program Design in C LanguagePage#includemain()charstr112=“Good”;charstr2=“luck!”;printf(“%s”,strcat(str1,str2);例:例:函数函数strcat()的使用。的使用。其状态如下:其状态如下:输出输出:Goodluck!Good0luck!0Goodluck!0str1str2str19.4 字符串函数8/26/202434 Program Design in

31、 C LanguagePage6字符串比较函数字符串比较函数strcmp引用形式:引用形式:strcmp(字符串字符串1,字符串,字符串2)作用:作用:比较字符串比较字符串1和字符串和字符串2。两个字符串从左至右。两个字符串从左至右逐个字符比较(按照字符的逐个字符比较(按照字符的ASCII码值的大小),码值的大小),直到字符不同或者遇见直到字符不同或者遇见0为止。为止。如果全部字符都相同,则返回值为如果全部字符都相同,则返回值为0。如果不。如果不相同,则返回两个字符串中第一个不相同的字符的相同,则返回两个字符串中第一个不相同的字符的ASCII码值的差,即字符串码值的差,即字符串1大于字符串大于

32、字符串2时函数值时函数值为正,否则为负。为正,否则为负。9.4 字符串函数8/26/202435 Program Design in C LanguagePage例:例:函数函数strcmp()的使用。的使用。main()charstr1=abc,str2=abc;charstr3=abc,str4=abc;inti=0;while(str3i=str4i&str3i!=0)i+;i=str3i-str4i;printf(“str1&str2:%dn,strcmp(str1,str2);printf(str3&str4:%dn,i);输出输出:str1&str2:0str3&str4:0这两句

33、的功能等同于函数这两句的功能等同于函数strcmp()9.4 字符串函数8/26/202436 Program Design in C LanguagePage7strlwr(字符串字符串)strlwr()的作用是将字符串中大写字母转换成的作用是将字符串中大写字母转换成小写字母。小写字母。8strupr(字符串字符串)strupr()的作用是将字符串中小写字母转换成的作用是将字符串中小写字母转换成大写字母。大写字母。大小写转换函数:大小写转换函数:9.4 字符串函数8/26/202437 Program Design in C LanguagePage例:例:编写用户登录程序编写用户登录程序#

34、includestring.hmain()charusername10,name10=zhangsan;gets(username);if(strcmp(username,name)printf(Usernamearewrong!n);elseprintf(Youareright!n);puts(username);9.4 字符串函数8/26/202438 Program Design in C LanguagePage例:例:有有3个英文字符组成的字符串,要求按照英文个英文字符组成的字符串,要求按照英文字母顺序输出。字母顺序输出。#includemain()charname320=John,

35、“Jan,Anny;charstr20;inti;for(i=0;i0)strcpy(str,name0);strcpy(name0,name1);strcpy(name1,str);9.4 字符串函数8/26/202439 Program Design in C LanguagePageif(strcmp(name0,name2)0)strcpy(str,name0);strcpy(name0,name2);strcpy(name2,str);if(strcmp(name1,name2)0)strcpy(str,name1);strcpy(name1,name2);strcpy(name2,str);for(i=0;i3;i+)printf(%sn,namei);9.4 字符串函数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号