C课件语言第09讲.ppt

上传人:本田雅阁 文档编号:3480010 上传时间:2019-09-01 格式:PPT 页数:39 大小:550.02KB
返回 下载 相关 举报
C课件语言第09讲.ppt_第1页
第1页 / 共39页
C课件语言第09讲.ppt_第2页
第2页 / 共39页
C课件语言第09讲.ppt_第3页
第3页 / 共39页
C课件语言第09讲.ppt_第4页
第4页 / 共39页
C课件语言第09讲.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

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

1、第九章 字符串,字符数组 指向字符串的指针变量 字符串处理函数,一、字符数组的定义,字符数组:用来存放字符型数据的数组。,格式: char 数组名常量表达式, ; char 数组名常量表达式1常量表达式2,,注意:,字符数组的定义、引用、初始化遵循 “数组”的规定。,9.2.1 字符数组的定义、初始化和引用,在字符数组中,每一个元素只能存放一个字符。,例: char a10,b30; char s1020,h20100;,二维字符数组,可以看作是一个字符串数组。,9.2.2 字符数组的定义、初始化和引用,二、字符数组的初始化,字符数组的赋值要符合数组的要求,除了在定义时初始化可以用字符串赋初值

2、,其余只能一个元素一个元素地赋值。,1)给所有元素赋初值:,例 char s17=s,t,r,i,n,g,!; char s2 =s,t,r,i,n,g,!;,1、一维字符数组初始化,9.2.3 字符数组的定义、初始化和引用,例 char s38=s,t,r,i,n,g,!,0; char s48=“string!“; char s58=“string!“;,C语言中,规定了一个“字符串结束标记”,以字符0代表。,说明:,9.2.3 字符数组的定义、初始化和引用,在字符数组中,并不要求它最后的一个字符为“0”,也可以没有“0”。,例:char s5=“China”; 也是合法的,字符串在实际存

3、储时,系统会自动的在其尾部添加一个结束标志0。,0代表ASCII码为0的字符,是一个空操作符,表示什么也不干。,9.2.3 字符数组的定义、初始化和引用,2)给部分元素赋初值: 例:char s19=C,h,i,n,a,!; char s29=C,h,i,n,a,!,0; char s39=”China!”; char s49= “China!”;,9.2.3 字符数组的定义、初始化和引用,2、二维字符数组初始化,二维字符串数组的初始化,可以采用二维字符数组初始化形式或者字符串初始化形式,例: char name210=J,o,h,n,0, M,a,r,r,y,0; char name210=

4、”John”,”Marry”; char name210=”John”,”Marry”;,这三种方法效果一样。,9.2.3 字符数组的定义、初始化和引用,1.利用格式符%c逐个输入、输出字符:,例:char str10; int i; for ( i=0; i9; i+ ) scanf(“%c“,,9.2.4 字符数组的输入输出,2.利用格式符%s,可以一次输入、输出字符串。,例: char str10; scanf(“%s“,str ); printf(“%sn“, str );,%s:遇第一个空白符(空格、Tab、回车)结束输入, 遇第一个0结束输出。,输入:program 输出:prog

5、ram,9.2.4 字符数组的输入输出,例: char s110, s215; scanf(“%s%s“,s1,s2 ); printf(“%s %sn“, s1,s2 );,输入:program C 输出:program C,输入:How are you 输出:How are,scanf函数虽然给多个字符的输入提供了简便的方法,但对于有空格的字符串的输入却有限制。,9.2.4 字符数组的输入输出,注意: scanf函数参数要求的是地址,故直接用字符数组名进行操作。 字符数组名表示的是该数组的首地址,因此使用格式符%s可以实现字符串整体的输入和输出。,9.3 字符串指针变量的定义与引用,字符串

6、常量的处理是用字符数组来实现的。也就是说,无论是否定义了字符数组,对于程序中出现的字符串,系统都会在内存中开辟一个字符数组连续存储空间来存放该字符串常量。 字符串的指针:字符串的首字符地址,也就是存放字符串的字符数组的首地址。 字符串指针变量:通常把char型指针变量称为字符串指针变量。也就是说,指向字符串的指针变量等同于指向字符数组元素的指针变量,可以指向字符串中的任意一个字符。,9.3 字符串指针变量的定义与引用,字符串指针变量的定义和初始化 方式一:将存放字符串的字符数组名赋给字符串指针变量,让字符串指针变量指向字符串的首字符,然后通过移动指针变量来访问字符串的其他字符。 例如: cha

7、r str = “Welcome to China!“; char *p; p = str; /* 等价于 p = &str0 */,9.3 字符串指针变量的定义与引用,字符串指针变量的定义和初始化 方式二:在程序中定义一个字符串指针变量,并将字符串的首地址直接赋给它,然后通过移动指针变量来访问字符串的其他字符。 例如: char *p = “Welcome to China!“; 等价于: char *p; p = “Welcome to China!“; 这里的字符串指针变量p指向字符串的首字符,即第一个字符W。,例 用字符串指针变量实现字符串操作 #include void main(

8、) char *str = “Welcome to China!“; printf(“%sn“, str); /*整体引用字符串*/ for ( ; *str!=0; str+ ) printf(“%c“, *str); /*逐个引用字符串中的字符*/ printf(“n“); ,9.3 字符串指针变量的定义与引用,程序运行结果: Welcome to China! Welcome to China!,9.3 字符串指针变量与字符数组,字符数组是由若干个元素组成,每个元素存放一个字符;而字符串指针变量存放的是字符串中某一个字符的地址。 赋值方式不同。字符数组只能对各个元素分别赋值,而字符串指针

9、变量只用赋给字符串的首地址就可以了。 例如,下面的赋值是正确的: char *str; str = “Welcome to China!“; /*str是指针变量*/ 下面的赋值是错误的: char str30; str = “Welcome to China!“; /*str是数组名*/,9.3 字符串指针变量与字符数组,字符串指针变量占用的内存要少于字符数组。 例如,编译系统为下面二维字符数组的定义及初始化分配了36个字节的内存空间: char str218 = “Hello“, “Welcome to China!“; 为下面两个字符串指针变量的定义及初始化分配了28个字节的内存空间:

10、char *str1 = “Hello“, *str2 = “Welcome to China“; 字符串指针变量的值是可以改变的,而字符数组的数组名永远代表该数组的首地址,它的值是不会变化的。,例 将字符串str1复制到字符串str2 #include void main( ) char str1 =“Copy string“, str230; char *p1=str1, *p2=str2; while(*p1!=0) *p2+=*p1+; *p2=0; printf(“String str2 = “); puts(str2); ,程序运行结果: String str2 = Copy st

11、ring,9.3 字符串指针变量与字符数组,9.3 字符串指针变量作为函数参数,特点: 用字符数组名或字符串指针变量名作为实参,向形参传递字符串的首地址; 作为形参的字符数组或字符串指针变量本质上都是字符串指针变量; 在被调用函数中可以改变字符串的内容,在主调函数中可以得到改变以后的字符串。,例 连接两个字符串str1和str2,连接结果放在str1中 #include void strlink(char *, char *); void main( ) char str115=“Hello “, str2 =“World!“; strlink(str1, str2); printf(“Str

12、ing str1 = %sn“, str1); void strlink(char *s, char *t) while(*s!=0) s+; /* 使s指向字符串str1的末尾 */ while(*t!=0) *s+=*t+; /* 将str2中的字符逐个连接到str1的末尾 */ *s=0; /* 在str1的末尾加上字符串结束标志 */ ,程序运行结果: String str1 = Hello World!,9.3 字符串指针变量作为函数参数,利用字符串输入输出函数,C语言要求在使用字符串函数时,要包含头文件stdio.h,1、字符串输入函数gets( ); 作用:是将一个字符串输入到字

13、符数组中,当遇到第一个回车时结束输入 格式:gets(字符数组名);,gets( )函数同scanf( )函数一样,在读入一个字符串后,系统自动在字符串后加上一个字符串结束标志0。,9.4 字符串函数,注意: 函数gets( )只能一次输入一个字符串。 函数gets( )可以读入包含空格和TAB的全部字符,直到遇到回车为止。,使用格式符“%s”的函数scanf( ),以空格、TAB或回车作为一段字符串的间隔符或结束符,所以含有空格或TAB的字符串要用gets( )函数输入。,9.4 字符串函数,例:函数gets( )与scanf( )的区别,#include main( ) char str1

14、20,str220; gets(str1); scanf(“%s“,str2); printf(“str1: %sn“,str1); printf(“str2: %sn“,str2); ,输出:str1: program C str2: program,9.4 字符串函数,2、 字符串输出函数puts( ) 作用:将一个字符串(以0结束的字符序列)输出。 格式:puts(字符数组名); 或 puts(字符串);,9.4 字符串函数,注意: 函数puts( )一次只能输出一个字符串。 函数puts( )可以输出转义字符。 函数puts( )输出字符串后自动换行。,printf( )函数可以同时输

15、出多个字符串,并且能灵活控制是否换行。所以printf( )函数比puts( )函数更为常用。,9.4 字符串函数,例:函数puts( )与printf( )的区别,#include main( ) char str1 =“student“,str2 =“teacher“; puts(str1); puts(str2); printf(“%s“,str1); printf(“%sn%s“,str1,str2); ,9.4 字符串函数,3 测字符串长度函数strlen 引用形式:strlen(字符数组) 作用:strlen( )是测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含0

16、的个数)。,9.4 字符串处理函数,例: char str12=“computer”; printf(“%d”,strlen(str); printf(“%d”,strlen(“computer”);,输出的结果都是8,9.4 字符串函数,例:函数strlen( )的使用。,#include #include main() int i; char str120,str220; gets(str1); gets(str2); for(i=0;str2i!=0;i+); printf(“%s : %dn“,str1,strlen(str1); printf(“%s : %dn“,str2,i);

17、printf(“%s : %dn“,“Good luck“,strlen(“Good luck“); ,输出:Good luck:9 Good luck:9 Good luck:9,这两句的功能等同于函数strlen( ),i 返回串长,9.4 字符串函数,4字符串拷贝函数strcpy 引用形式:strcpy(字符数组1,字符串2) 作用:将字符串2复制到字符数组1中。,注意: (1) 字符数组1必须足够大,以便容纳字符串2的内容。 (2) 字符串2可以是字符数组名或者字符串常量。当字符串2为字符数组名时,只复制第一个0前面的内容(含0),其后内容不复制。,9.4 字符串函数,例:函数strc

18、py( )的使用。,main( ) int i; char str120,str2 =“Good luck“; char str320,str4 =“Good luck“; strcpy(str1,str2); for (i=0;str4i!=0;i+) str3i=str4i; str4i=0; printf(“str1: %st str2 : %sn“,str1,str2); printf(“str3: %st str4 : %sn“,str3,str4); ,输出: str1:Good luck str2:Good luck str3:Good luck str4:Good luck,这

19、两句的功能等同于函数strcpy( ),9.4 字符串函数,5字符串连接函数strcat 引用形式:strcat(字符数组1,字符串2) 作用:将字符串2的内容复制连接在字符数组1的后面,其返回值为字符数组1的地址。,注意: (1)字符数组1不能是字符串常量,并且必须足够大,以便可以继续容纳字符串2的内容。 (2)连接前字符数组1的0将被字符串2覆盖,连接后生成的新的字符串的最后保留一个0。,9.4 字符串函数,#include main( ) char str112=“Good ”; char str2 =“luck!”; printf(“%s”,strcat(str1,str2); ,例:

20、函数strcat( )的使用。,其状态如下:,输出: Good luck!,9.4 字符串函数,6字符串比较函数strcmp 引用形式:strcmp(字符串1,字符串2) 作用: 比较字符串1和字符串2。两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不同或者遇见0为止。 如果全部字符都相同,则返回值为0。如果不相同,则返回两个字符串中第一个不相同的字符的ASCII码值的差,即字符串1大于字符串2时函数值为正,否则为负。,9.4 字符串函数,例:函数strcmp( )的使用。,main( ) char str1 =“abc“,str2 =“abc“; char str

21、3 =“abc“,str4 =“abc“; int i=0; while(str3i=str4i ,输出: str1&str2: 0 str3&str4: 0,这两句的功能等同于函数strcmp( ),9.4 字符串函数,7 strlwr(字符串) strlwr( )的作用是将字符串中大写字母转换成小写字母。,8 strupr(字符串) strupr()的作用是将字符串中小写字母转换成大写字母。,大小写转换函数:,9.4 字符串函数,例:编写用户登录程序,#include “string.h“ main( ) char username10, name10=“zhangsan“; gets(

22、username ); if ( strcmp(username,name) ) printf(“ Username are wrong !n“); else printf(“You are right !n“); puts( username ); ,9.4 字符串函数,例:有3个英文字符组成的字符串,要求按照英文字母顺序输出。,#include main( ) char name320=“John“,“Jan“,“Anny“; char str20; int i; for(i=0;i0) strcpy(str,name0); strcpy(name0,name1); strcpy(name1,str); ,9.4 字符串函数,if (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备18001539号-1