内容正文:
千锋教育
《C语言程序设计》
教学设计
课程名称: C语言程序设计教程
授课年级:
授课学期:
教师姓名:
2017年09月01日
课程名称
第10章 字符串和字符串函数
计划学时
4学时
内容分析
本章主要介绍字符串表示、字符串输入、字符串输出、操作字符串、通过命令行传递参数、字符串函数的实现
教学目标
与
教学要求
要求学生掌握字符串的表示、操作字符串函数及实现,熟悉字符串的输入与输出,理解获取命令行参数
教学重点
字符串表示、字符串输入与输出、操作字符串、字符串函数的实现
教学难点
字符数组与字符串的关系
通过命令行传递参数
教学方式
课堂讲解及ppt演示。
教
学
过
程
第一课时
(字符串表示、字符串输入函数、字符串输出)
字符串表示
在汉语里,将若干个字连起来就是一个字符串,例如“千锋教育”就是一个由四个汉字组成的字符串。在深入学习字符串之前,先来了解字符串的前身——字符数组。
· 字符数组
字符数组就是用来存放字符的数组。具体示例如下:
char a[8] = {'q', 'i', 'a', 'n', 'f', 'e', 'n', 'g'};
上面的语句定义了一个长度为8的字符数组,并为其指定了初始值。从中可以得出,字符数组和其他数组定义方式类似,只是存储的元素类型为字符型而已。每个元素占用一个字节,具体如图10.1所示:
q
i
a
n
f
e
n
g
图10.1 字符数组a中的元素分配情况
· 字符串
在各种编程语言中,字符串都是十分重要的。C语言中并没有直接提供字符串这个特定类型,而是用特殊的字符数组来存储字符串。C语言对于字符串做了如下规定:以空字符'\0'结尾的字符数组被称作字符串。这种字符数组也被称为C风格字符串。
要将上一小节中用到的字符数组转换成字符串,需要修改为下面的代码:
char a[] = {'q', 'i', 'a', 'n', 'f', 'e', 'n', 'g', '\0'};
注意到上面的语句中省略了a的大小。修改后,由于数组的末尾多了一个空字符,字符数组a的大小为9。但是这个字符串的长度为8,注意字符串的长度并不包括末尾空字符。此外,还可以在空字符后面添加其他字符,具体示例如下:
char a[] = {'q', 'i', 'a', 'n', 'f', 'e', 'n', 'g', '\0', 'h', 'i'};
这个字符数组的大小为11,但由于空字符出现在字符数组的中间,因此它所表示的字符串仅仅是“qianfeng”,对应的字符串长度是8。从字符数组的第一个字符开始,遇到第一个空字符就标志着字符串的结束。
在字符数组初始化时,这种给每个数组元素赋初值的表达未免有点繁琐。在C语言程序中可以直接使用一个字符串常量对字符数组进行初始化,具体示例如下:
char a[9] = {"qianfeng"};
上例中双引号之间的是一个字符串常量。一旦这样声明,会自动在字符串常量后添加一个空字符'\0'作为字符串的结束标志,该标志总在最后一个字符之后。这意味着字符数组a的大小不是8个字节,而是9个字节。
注意上面的定义和下面的定义是等价的:
char a[9] = {'q', 'i', 'a', 'n', 'f', 'e', 'n', 'g', '\0'};
由定义数组的方法可知,可以在声明时省略数组大小,让编译器自动确定数组的大小,具体示例如下:
char a[] = {"qianfeng"};
· 字符串与指针
在指针一章中,数组名可以当作指针使用,指针也可以被直接用来访问数组中的元素。字符型指针可以使用char*来定义,它既可以指向一个字符型变量,也可以指向整个字符串。具体示例如下:
char *p = "qianfeng";
上例中字符指针p既指向了字符'q',又指向了字符串"qianfeng",这是因为字符'q'位于字符串"qianfeng"的起始处,由于p指向的是字符串"qianfeng"所在的内存地址的起始位置,因此它也是指向字符'q'的字符指针。
字符串输入
除了在声明变量时通过初始化的方式来定义字符串外,还可以通过C语言提供的形形色色的字符串输入函数来获得字符串,常见的字符串输入函数如表10.1所示:
表10.1 C语言中的字符串输入函数
函数名
描述
gets
从控制台读入用户输入的字符串
fgets
从控制台或文件中读入用户输入的字符串
(fgets函数在12章中介绍)
scanf
根据一定的格式读入数据(包括字符串)
· gets