C语言程序设计:第15章 字符串处理 课件教案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序设计课件教案

第十五章字符串处理

教学目的

字符与字符串的长度和尺寸的区别,在此基础上让学生掌握字符数组的定义、初始化和应用,字符串与指针(字符串的常用处理函数、sizeof)。

教学要求

1.熟练掌握字符和字符串的基本语法

2.熟练掌握字符数组的定义、初始化和应用

重点和难点

1.字符和字符串

2.字符数组的定义、初始化和应用

教学支撑环境与教学资源:

1.笔记本电脑

2.VC2010

3.投影仪

教学方法

讲授法、练习法、讨论法

授课课时

6课时

教学过程

------------------------------------AM------------------------------

-------

一、课程引入

存储全班同学的成绩如何实现存储学生的姓名,可以采用定义字符数组方式解决。

二、一维字符数组与字符串

复习字符和字符串常量:

1.字符常量:用一对单引号引起来的一个字符,要求单引号里面有且仅有一个字

符,在内存中以ASCII码的形式存储,占据一个字节

|---普通字符常量:注意单引号、双引号和斜杠三个特殊字符的写法'\\' '\'' '\"'即必须在前面加\字符

|---转义字符常量

|---数值转义:'\xhh':hh表示后面跟1~2位16进制数最大为'\FF'

'\ddd':ddd跟1~3位八进制数不能超过unsigned char 的最大值,因此最大为'\377'

|---字符转义:'\n' '\t'

2.字符串常量:用一对双引号包含的字符,在内存中存放时,以’\0’为结束标识(\0是数值转义字符,对应的ASCII码为数值0)。

demo "china"; "192.168.0.1"; "richard_20_170301_"

NOTE:

1> 计算字符串尺寸可以使用sizeof();

demo

printf("%d", sizeof("china\n");//占据6个字节

printf("%d", sizeof(""));//空串,只含有'\0'占据1个BYTE

printf("%d", sizeof("china\0usa\n"));//遇到第一个\0截止因此不会输出usa,但是usa还是占据内存且后面会隐含\0,占据10byte

printf("%d", sizeof("\\\"\377123\378"));//\377 占据1BYTE \378不能算一个,因为越界因此算2BYTE,总共9byte

printf("%d", sizeof("\0xFF"));

2>字符串长度:从字符串的左边开始计数,到第一个'\0'为止,且'\0'不参与计数。

demo

printf("%d", strlen("china"));//5

printf("%d", strlen(""));//0

printf("%d", strlen("china\0usa"));//5

思考:字符串常量可以改写吗?

如何定义字符串变量从而实现字符串的改写?

------C语言中没有字符串类型,用字符数组来存放字符串,即用字符型的一维数组称为一维字符数组。

三、字符数组定义和初始化

1.传统的字符集合方式(不推荐)

char str1[5]={'a','b',’c’,’d’,'e'};//全部赋值,

char str2[5]={’a’,’b’,’c’};//部分元素赋值

char str3[]={’a’,’b’,’c’,’d’,’e‘};//省略数组长度赋值

思考:上面三个字符数组中存放的是字符串吗?如果数组内存中没有'\0'就未存储字符串

char str1[5]={'a','b',’c’,’d’,'e'};//不是字符串

char str2[5]={’a’,’b’,’c’};//为赋值的元素为'\0',因此是字符串

char str3[]={’a’,’b’,’c’,’d’,’e‘};//省略数组长度赋值,长度根据

字符的个数确定,不会自动补充'\0',因此不是字符串

总结:用字符集合的方式赋值时,养成习惯在末尾补充'\0'否则不是字符串

2. 字符串字面值方式(推荐)

char ch[5]="abcd";//系统会自动在后面加'\0',即ch[4]='\0'

char ch[3]="abcde";//错误,超出数组的长度

char ch[5]="abcde";//错误,超出数组长度

char ch[]="abc";//推荐!!系统会自动在后面加'\0',即a[3]='\0',所以该数组的元素个数是4个。

四、字符串的存储结构和指针(重点)

1.存储结构字符串占据连续的内存单元以\0结束

demo char a[] = "";

2.字符串的首元素地址:C语言中用字符串常量或一维数组的数组名表示字符串的首地址(规定)

demo

#define ARR_SIZE 100

int main(void){

char a[ARR_SIZE] = "china";//画内存图和地址关系*****

printf("%X\n", a);

printf("%X\n", "china");

return 0;

}

3.使用指针指向一个字符串

1.可以在定义字符指针变量的同时,将存放字符串的存储单元起始地址赋值给指针变量。

char * ps1="form one";//这里是把存放字符串常量"form one"的无名存储区的首地址

//赋值给指针变量ps1,使ps1指向字符串的第一个字符f。

char str[]="form two",*ps2=str;

2.通过赋值运算使指针指向一个字符串

char str[]="from two" ,*p2;

p2=str;//词语等价于p2=&str[0];

通过赋值语句使指针p2指向了存放字符串的字符数组str的首地址

注意:

1>指针变量指向的是字符串的首地址,字符串是另外占据存储空间的。(画图说明)

2>字符串赋值给字符数组时,字符串就是存放字符数组的存储空间。(画图说明)4.输入输出的基本原则

原则:输入和输出必须给出字符串的首地址

1>字符串的输出:

相关文档
最新文档