《C语言程序设计》课程教案表
授课题目 第四章 数组(3)——字符数组和字符串 教学目的和要求 1.掌握:几种常用的字符串处理函数 2.熟悉:指针与数组。 教学内容 1.基本内容:(1)几种常用的字符串处理函数(2)指针与数组。 2.重点:几种常用的字符串处理函数 3.难点:指针与数组 讲课进程和时间分配 1、复习与新知识导入(5分钟) 2、字符串处理函数(45分钟) C语言编译系统中,提供了很多有关字符串处理的库函数。下面介绍几个常用的字符串处理函数。使用输入、输出字符和字符串函数时,应在函数前加上头文件“stdio.h”;使用其他字符串操作函数时,则应加上头文件“string.h”。 板书:#include #include (1)字符串输出函数 格式:puts(字符串) 功能: 将一个字符串(以?\\0?为结束标志)输出到终端。输出的字符串中可以包含转义字符。例如: char str[]={“China\\nBei jing”};puts(str); 输出:China Bei jing 在输出时将字符串结束标志?\\0?转换成?\\n?,即输出完字符串后换行。 板书:puts(str);与printf(”%s\\n”,str)等价或puts(“OK!”);与printf(“%s\\n”,”OK!”)或printf(“OK!\\n”)等价 (2)字符串输入函数 格式:gets(字符数组) 功能: 从终端输入一个字符串(可包含空格)以回车为输入结束标志,将接受到的字符依次赋值给字符数组各个元素,并自动在字符串末尾加结束标记?\\0?。例如:gets(str); 注意:用puts和gets函数只能输入或输出一个字符串,不能写成:puts(str1,str2); 或:gets(str1,str2);说明:字符串可以是字符数组或字符串常量。 而scanf()是以回车、空格或tab键做分隔符的。 例:void main() { char s[100]; printf(“请输入一个字符串:”); gets(s); printf(“输入的字符串是:”); puts(s); } 红色改为 puts(gets(s)),不影响程序运行结果。 (3)连接两个字符串函数 课时安排 授课时间 2 格式:strcat(字符串1,字符串2) 功能: 连接两个字符串中的字符,把字符串2的字符连接到字符串1的字符后面,结果放在字符串1中,函数调用后得到一个函数值——字符串1的起始地址。 例如: char str1[30]={“people′s republic of”}; char str2[]={“china”}; printf(“%s”,strcat(str1,str2)); 输出:people′s republic of china 说明:1)字符串1必须足够大,以便能容纳连接后的新字符串。 2)连接前两个字符串后面都有一个?\\0?,连接时将字符串1后面的?\\0?取消,只在新串的最后保留一个?\\0?。 思考:以下程序是正确的 char c; c=?A?+?B?; 那么,下面的程序呢?char c[10];c=”A”+”B”;是不正确的,必须用strcat()函数来连接。 (4)字符串拷贝函数strcpy 格式:strcpy(字符数组,字符串) 功能: 将字符串拷贝到字符数组中去。 例如: char str1[10],str2[]={“china”}; strcpy(str1,str2); /* 或strcpy(str1,“china”); */ 执行后str1的内容为: china\\0\\0\\0\\0\\0 说明: 1)字符数组必须足够大,以便能容纳被拷贝的字符串。 2)拷贝时连同字符串后面的?\\0?一起拷贝到字符数组中。 3)不能用赋值语句将一个字符串常量或字符数组直接赋给一 个字符数组。 下面的用法是错误的:str1={“china”};str1=str2;而只能用拷贝函数strcpy处理。 用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。 如下面是合法的:char a[5],c1,c2;c1=?A?;c2=?B?;a[0]=?c?;a[1]=?h?;a[2]=?i?;a[3]=?n?;a[4]=?a?; 4)可以用strcpy函数将字符串中前面若干个字符拷贝到字符数组中去。 例如:strcpy(str1,str2,2); 将str2中前面2个字符拷贝到str1中去,然后再加一个?\\0?。 (5)字符串比较函数 格式:strcmp(字符串1,字符串2) 功能: 比较字符串1和字符串2的大小。 说明: 按照ASCII码值大小比较,将两个字符串自左至右逐个字符比较,直到出现不同的字符或遇到?\\0?为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同字符的比较结果为准。 1.字符串1==字符串2,函数值=0; 2.字符串1>字符串2,函数值>0; 3.字符串1<字符串2,函数值<0。 两个字符串的比较,不能用以下形式 str1==str2或str1>str2只能用 strcmp(str1,str2)>0或==0或<0来判断 (6)测试字符串长度函数 格式:strlen(字符数组) 功能: 测试字符串长度,函数值为字符串中实际长度,不包括?\\0?。例如: char str[10]={“china”}; printf(“%d”,strlen(str)); 结果为: 5 (7)字符串小写函数 格式:strlwr(字符串) 功能: 将字符串中大写字母转换成小写字母。lwr是lowercase(小写)的缩写。 (8)字符串大写函数 格式:strupr(字符串) 功能:将字符串中小写字母转换成大写字母。upr是uppercase(大写)的缩写。 (9)字符数组程序举例 1)输入一个字符串,将其中的大写字母均变成小写字母。 # include # include main() { char s[40],c; int i=0; printf(“输入一个字串:”); gets(s); strlwr(s); printf(“输出转换后的字串:”); puts(s); } 2)从字符串中取出指定长度的子串。 #include main() { char s1[40],s2[40]; int i=0,m; printf(“\\n输入要截取子串的母串:”); gets(s2); printf(“\\n输入要截取子串的长度:”); scanf(“%d”,&m); while(i #include