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

上传人:b****8 文档编号:9858254 上传时间:2023-02-07 格式:DOCX 页数:18 大小:19.18KB
下载 相关 举报
C语言程序设计第15章 字符串处理 课件教案.docx_第1页
第1页 / 共18页
C语言程序设计第15章 字符串处理 课件教案.docx_第2页
第2页 / 共18页
C语言程序设计第15章 字符串处理 课件教案.docx_第3页
第3页 / 共18页
C语言程序设计第15章 字符串处理 课件教案.docx_第4页
第4页 / 共18页
C语言程序设计第15章 字符串处理 课件教案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计第15章 字符串处理 课件教案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第15章 字符串处理 课件教案.docx(18页珍藏版)》请在冰豆网上搜索。

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

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

C语言程序设计课件教案

第十五章字符串处理

教学目的

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

教学要求

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

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

重点和难点

1.字符和字符串

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

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

1.笔记本电脑

2.VC2010

3.投影仪

教学方法

讲授法、练习法、讨论法

授课课时

6课时

教学过程

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

一、课程引入

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

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

复习字符和字符串常量:

1.字符常量:

用一对单引号引起来的一个字符,要求单引号里面有且仅有一个字符,在内存中以ASCII码的形式存储,占据一个字节

|---普通字符常量:

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

|---转义字符常量

|---数值转义:

'\xhh':

hh表示后面跟1~2位16进制数最大为'\FF'

'\ddd':

ddd跟1~3位八进制数不能超过unsignedchar的最大值,因此最大为'\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.传统的字符集合方式(不推荐)

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

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

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

思考:

上面三个字符数组中存放的是字符串吗?

如果数组内存中没有'\0'就未存储字符串

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

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

charstr3[]={’a’,’b’,’c’,’d’,’e‘};//省略数组长度赋值,长度根据字符的个数确定,不会自动补充'\0',因此不是字符串

总结:

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

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

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

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

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

charch[]="abc";//推荐!

系统会自动在后面加'\0',即a[3]='\0',所以该数组的元素个数是4个。

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

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

demochara[]="";

2.字符串的首元素地址:

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

demo

#defineARR_SIZE100

intmain(void){

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

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

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

return0;

}

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

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

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

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

charstr[]="formtwo",*ps2=str;

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

charstr[]="fromtwo",*p2;

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

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

注意:

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

(画图说明)

2>字符串赋值给字符数组时,字符串就是存放字符数组的存储空间。

(画图说明)

4.输入输出的基本原则

原则:

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

1>字符串的输出:

demo输出字符串常量---字符串常量本身表示字符串的首元素地址

printf("china\n");

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

puts("china");//会自动换行

puts("");//输出换行

printf("学渣.\n");

puts和printf的区别:

puts会自动输出换行而printf不会,"推荐用puts"

demo输出存储在字符数组中的字符串

#defineARR_SIZE100

chara[ARR_SIZE]="china\n";

charb[ARR_SIZE]="";

charc[ARR_SIZE]="学渣.\n";

printf(a);//ERROR必须加"%s"

printf(b);//ERROR必须加"%s"

printf(c);//ERROR必须加"%s"

printf("%s",a);

printf("%s",b);

printf("%s",c);

puts(a);

puts(b);

puts(c);

2>字符串的输入:

scanf_s和gets

demo:

从键盘上输入字符串,并用字符数组存储

#include

#defineARR_SIZE100/*一维字符数组a的长度*/

intmain(void)

{

chara[ARR_SIZE]="";//养成赋初值的习惯,通常用空串给字符数组赋初值

printf("输入字符串(不能含有空格,长度不超过%d):

",ARR_SIZE-1);

scanf_s("%s",a);//scanf_s不能接受含有空格的字符串,否则无法接受空格后面的字符

printf("你刚才输入的字符串为:

%s\n",a);

printf("输入字符串(可以含有空格,长度不超过%d):

",ARR_SIZE-1);

gets(a);//gets可以接受含有空格的字符串,否则无法接受空格后面的字符

puts(a);

return0;

}

总结:

scanf_s:

不能完整的接收含有空格的字符串而gets可以,因此推荐用gets

printf:

输出字符串不会自动换行,因此推荐用puts

思考:

找出下面语句中的错误

chara[100]="china";

a[0]='b';

char*p=a;

*p='m';

char*q="japan";

*q='m';

---------------------------------------------------------PM-----------------------------------------------------------------

五、字符串处理(输入输出、赋值、连接、比较...)

注意:

必须包含stdio.h好string.h

1.求字符串长度函数

intstrlen(constchar*pStr)//参数:

字符串指针返回值:

长度

demo

intmain(void)

{

chara[]="abcde";

printf("%d",strlen(a));

printf("%d",strlen("llovecteacher.\n"));

printf("%d",strlen("192\0abc"));

printf("%d",strlen("192\012abc"));

return0;

}

2.字符串复制函数

char*strcpy(char*pDes,constchar*pSrc)//要确保pDes足够长,否则产生运行时错误

demo交换字符串

#defineARR_SIZE100

intmain(void)

{

chara[ARR_SIZE]="china";

charb[ARR_SIZE]="japan";

chart[ARR_SIZE]="";

strcpy(t,a);

strcpy(a,b);

strcpy(b,t);

puts(a);

puts(b);

return0;

}

思考:

找出下面程序的错误

chara[ARR_SIZE]="china";

charb[ARR_SIZE]="japan";

chart[ARR_SIZE]="";

t=a;

a=b;

b=t;

思考:

找出下面程序的错误

#include

intmain(void)

{

chara[]="usa";

charb[10]="japan";

strcpy(a,b);//a内存不足,对未知内存进行改写,产生了运行时错误

puts(b);

return0;

}

3.字符串连接函数

char*strcat(char*pDes,constchar*pSrc)//要确保pDes足够长,否则产生运行时错误

#include

#include

intmain(void)

{

chara[10]="china";

charb[10]="japan";

chars[]="GoldenGlobal";

char*p="View";

strcat(a,b);

puts(b);

strcat(s,p);

puts(s);

return0;

}

思考:

下面程序的错误

#include

#include

intmain(void)

{

chara[]="china";

charb[10]="japan";

strcat(a,b);//a内存不足,对未知内存进行改写,产生了运行时错误

puts(b);

return0;

}

4.intstrcmp(constchar*pDes,constchar*pSrc);

设这两个字符串为str1,str2,

若str1==str2,则返回零;

若str1

若str1>str2,则返回正数。

比较规则:

从左向右的字符两两比较,如果相同则继续向后比较,直到遇到第一个不相同的字符就以该不同的字符作为比较的依据

#include

intmain(void)

{

chara[100]="123ac";

charb[100]="abc";

printf("%d\n",strcmp("china","japan");

printf("%d\n",strcmp("chine","chinese");

printf("%d\n",strcmp("CHINA","china"));

printf("%d\n",strcmp("张三","李四"));//不支持中文字符的大于或小于比较,仅支持中文串的等于比较

printf("%d\n",strcmp(a,b));

printf("%d\n",strcmp("australia",b));

printf("%d\n",strcmp(a"usa"));

return0;

}

5.小写字母转大写字母char*strupr(char*pStr);

#include

#include

intmain(void)

{

chars[]="Copywrite1999-2000GGVTechnologies";

charb[100]="";

puts(strupr(s);

strcpy(b,s);

puts(b);

return0;

}

6.大字母转小写字母char*strlwr(char*pStr);

#include

#include

intmain(void)

{

chars[]="Copywrite1999-2000GGVTechnologies";

charb[100]="";

puts(strlwr(s);

strcpy(b,s);

puts(b);

return0;

}

六、课后作业

练习1:

DIY库函数DIYstrcpy

demo1

char*myStrcpy1(char*pDes,constchar*pSrc)

{

if(0==pDes||0==pStr)

{

return0;

}

char*t=pDes;

while(*pStr!

='\0')

{

*pDes++=*pStr++;

}

*pDes='\0';

returnt;

}

demo2

char*myStrcpy2(char*pDes,constchar*pSrc)

{

if(0==pDes||0==pStr)

{

return0;

}

char*t=pDes,i=0;

while(pSrc[i])

{

pDes[i]=pSrc[i];

i++;

}

pDes[i]='\0';

returnt;

}

intmain(void)

{

chara[100]="china";

charb[100]="japan";

chart[100]="";

myStrcpy1(t,a);

myStrcpy1(a,b);

myStrcpy1(b,t);

puts(a);

puts(b);

}

练习2:

DIY库函数intstrcmp(constchar*pDes,constchar*pSrc)

intmyStrcmp(char*pStr1,char*pStr2)

{

if(0==pDes||0==pStr)

{

return0;

}

while(*pStr1!

=*pStr2)

{

return*pStr1-*pStr2;

}

return*pStr1-*pStr2;

}

练习3:

DIY库函数intstrlen(constchar*pStr);

intmyStrlen(char*pStr)

{

intlen=0;

if(0==pStr)

{

return-1;

}

while(*pStr)

{

len++;

pStr++;

}

returnlen;

}

intmain(void)

{

printf("%d",myStrlen("china\0japan"));

return0;

}

练习4:

DIY库函数char*strcat(char*dest,constchar*src);

char*strcat(char*dest,constchar*src)

{

if(0==dest||0==src)

{

return0;

}

char*p=dest;

while(*dest)

{

dest++;

}

while(*str)

{

*dest++=*str++;

}

*dest='\0';

returnp;

}

demo:

编写函数,从字符串中找出空格,并返回空格个数

intcheck(char*p,intlen);

intmain(void)

{

chara[20]="wearefamily";

intspaceNum=0;

spaceNum=chack(a,20);

printf("%d\n",spaceNum);

return0;

}

//利用字符串以'\0'结尾的特性,对字符串进行检测

intcheck(constchar*p)

{

if(0==p)

{

return-1;

}

intnum=0;//统计空格个数

while(*p!

='\0')

{

if(*p=='')num++;

p++;

}

returnnum;

}

demo:

编写函数,从字符串中找出某个字符,并用逗号替换,并返回空格个数

intexchang(char*p,charn);

intmain(void)

{

chara[]="wearefamily";

intspaceNum=0;

spaceNum=exchange(a);

printf("%d\n",spaceNum);

puts(a);

return0;

}

intexchang(char*p,charn)

{

intnum=0;

while(*p!

='\0')

{

if(*p=='')

{

*p=',';

num++;

}

p++;

}

returnnum;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1