C语言课件06.ppt_第1页
C语言课件06.ppt_第2页
C语言课件06.ppt_第3页
C语言课件06.ppt_第4页
C语言课件06.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章,数组(二),第 2 页,本章(二)主要内容,字符数组 概念的引入 字符数组的定义、引用及初始化 程序举例 用于字符串处理的函数,第 3 页,字符数组问题的提出,一个简单的字符型变量只能存放一个字符。对于字符串数据,c语言中是用字符数组来存放的。,字符串是C语言的一种数据类型。它由若干个字符组成,以字符串结束标记0,(ASCII码值为0的字符)作为其最后一个字符。,在程序中,一个字符串在字面上是以一对双引号括起来的若干个字符,也称字符串常量。如“HELLO!。,问题:从键盘上输入一字符串,统计该字符串的长度。,第 4 页,字符数组问题分析,要完成从键盘上输入一字符串,并统计该字符串的长度

2、。需要解决:,一个字符串可视为一组类型相同(字符型)的有顺序的数据。因此,可以定义字符型数组来存放字符串。字符数组的每个元素都可以作为一个字符型变量存放字符串中对应字符。,字符串长度是指字符串中除字符串结束标记0外的所有字符的个数。例如字符串“ABCde”长度为5,注意:空格也是有效字符。,第 5 页,字符数组程序,#include string.h void main() char a80; int n=0,i=0; /*为长度计数器n和数组下标i赋初值0*/ printf(nInput a string:); gets(a); /*从键盘接收一字符串并存入字符数组a中*/ while(ai

3、+!=0) n+; printf(Length of “%s=%dn,a,n); ,char a80; 定义了一个名为a类型为字符型,大小(长度)为80的数组,因此字符数组a能存放长度不超过79的字符串。因为必须留一个元素存放字符串结束标志0。,从键盘上输入字符串是通过函数调用语句gets(a)来完成的。功能是从键盘上输入一个字符串到指定的字符数组中。,循环语句来完成求字符串长度 while(ai+!=0) n+; 从字符数组的第1个元素(下标为0)起,逐个判断,若当前字符不为结束标记0,则长度计数器n加1,直到当前字符为0结束。上述语句可改写为: while(ai! =0) i+;n+;,程

4、序运行结果为: Input a string: Welcome to China! Length of“ Welcome to China!”=17,程序,第 6 页,字符数组概念及定义,用来存放字符数据的数组是字符数组。字符数组中的每个元素都可以看为一字符型变量,可存放一个字符。以其ASCII码的形式存放。 字符串是C语言中的字符型数据。它由若干个字符组成,其最后一个字符是字符串结束标志0。在C语言中,字符串是借助于一维数组来存放的。,字符数组的定义 字符数组的定义与一、二维数组的相同。例如: char s80; char s540;,第 7 页,字符数组初始化,1逐个字符赋给数组中各个元素

5、,即把所赋初值依次放在一对花括号中。例如: char srt16=H, e, l, l, o, !; char str27=H, e, l, l, o, !, 0;,2直接引用字符串常量给字符数组赋初值。例如: char str27=“Hello!”; char str27= “Hello!”;,3赋初值的字符个数少于数组元素。此时,系统将会自动在其后的元素假如0。例如: char str110=H, e, l, l, o, !; char str210=“Hello!”;,系统会自动在最后加入0,所以不必人为加入。由于定义了str2数组占有7个连续内存单元,因此有足够空间存放字符串。若是定义

6、成: char str26=“Hello!”; 6个存储单元不够用,结束符0将占用下一个不属于str2的存储单元。,第 8 页,字符数组引用,1逐个引用字符数组中一个元素,得到一个字符。,不论字符数组中存放的是单个字符序列,还是字符串,都可以通过使用数组名及其下标来实现逐个引用字符数组单个字符。输入输出一个字符可利用格式输入函数中格式说明“%c”来完成。 例 6 逐个输出字符数组中单个字符。 void main() char c6=H,e,l,l,o,!; int i; for (i=0; i6; i+) printf(“%c”,ci);/*逐个引用字符数组中的每个元素ci*/ printf(

7、“n”); ,第 9 页,字符数组引用,2当字符数组存放字符串时,可以一次引用整个字符数组。,字符数组的名字是一个地址常量,它代表的是字符数组的首地址。当字符数组中存放的是字符串时,可把字符数组当为字符串来处理。此时,允许使用数组名一次引用整个数组。可以在调用字符串处理函数时,使用数组名字作实参,也可以使用字符数组名来进行输入输出。但是,不可使用赋值语句给字符数组整体赋一字符串。例如: char str10; str=“Hello C!”; 以上赋值语句是不允许的。因为数组s是一地址常量,不能被重新赋值。,第 10 页,字符数组引用,2当字符数组存放字符串时,可以一次引用整个字符数组。,(1)

8、可以在sanf()及printf()函数中使用格式说明%s来实现字符串的整体输入和输出。例如: char str10; scanf(“%s”,str); printf(%s,str); 这里str是数组名,输入字符依次存入以数组首地址为起点的存储单元。并自动在末尾加0。用%s格式符输入字符串时,是以空格符,TAB符,及回车符来结束一个串的输入的。若输入字符串长度超过字符数组所能容纳的字符数时,系统不报错,相当于下标超界。 执行输出语句时,将从这一地址开始,依次输出存储单元中的字符,直到遇到一个0结束输出。0不在输出之列。输出结束后不自动换行。,第 11 页,字符数组引用,(2)调用gets(

9、)和puts( )函数实现字符串整体输入输出。例如: char str10; gets(str); 其中str接受从键盘读入字符串(包括空格符),直到读入一个换行符为止,系统自动把换行符用0代替。 例如,执行上述语句时,若从第一列输入: Helloc! (此处代表空格,代表Enter键) 将读入9个字符(包括空格和换行符),系统自动用0代替最后换行符。 用puts( )函数实现字符串整体输出,例如: puts(str); 其中str为数组名,执行上述语句时,从数组str首地址开始,依次输出存储单元中字符,遇到第一个0结束输入,并自动输出一个换行。,第 12 页,字符数组引用,例 7 引用数组名

10、输入输出字符串。 void main() char str80; printf(“请输入一字符串:”); gets(str); printf(“n输入的字符串是:”); puts(str); ,程序运行结果: 请输入一字符串:Happy 输入的字符串是:Happy,第 13 页,字符数组程序举例,例 8 编写一程序,实现两个字符串s1和s2的比较,并根据比较的情况输出下列结果: 负数 s1s2,分析:字符串进行比较的方法是:从两字符串(数组)的初始位置(i=0)开始,将它们对应位置(相同下标)的字符的ASCII码值进行比较,只有当前字符相等(s1i=s2i)而且不是两字符串“同时”到尾(s1i

11、!=0),才继续去比较下一个(i值增1)字符。有两种情况会结束比较: 第一种是出现不相等字符,第二种是两字符相等,但遇到了串结束符0,不管哪种情况,由当前两个字符相减而得到最后结果。当s1i和s2i不相等,若s1i大于s2i,相减结果大于0,表示s1串大于s2串,若s1i小于s2i,相减结果小于0,表示s1串小于s2串。若两串相等,同时遇到结果标志,相减的值必然等于0。,第 14 页,void main() char s181,s281; int i=0,r; printf(nInput No.1 string: ); gets(s1);/* 从键盘输入第一个字符串入s1 */ printf(

12、nInput No.2 string: ); gets(s2);/* 从键盘输入第二个字符串入s2 */ while(s1i=s2i ,Input No.1 string:ABCDMFG Input No.2 string:ABCDEFHJK The result is:8,第 15 页,字符数组程序举例,例 9 从键盘上输入一个字符串,并复制到另一个字符数组后显示出来。,void main() char str120,str220; int j=0; printf(”Input a string:”); scanf(“%s”,str1); while(str1j!=0) str2j=str1

13、j; j+; str2j=0; printf(“%s”,str2); ,提示:复制字符串就是将str1串中的字符逐个放到数组str2的对应数组元素中(包括0)。,第 16 页,字符串处理函数,语言中没有提供对字符串进行整体操作的运算符,但提供了很多有关字符串操作的库函数。例如,不能由运算符实现的字符串赋值、合并和比较运算,都可以通过调用库函数来实现。下面介绍4种常用的字符串处理函数。在使用这些函数时,必须在程序前面用命令行指定包含标准头文件“string.h”。,第 17 页,字符串处理函数,1、 求字符串长度函数strlen()。 调用形式: strlen(s) 此函数计算出以S为其地址的字

14、符串的长度,作为函数值返回。这一长度不包括串尾的结束标志0,编一程序,求字符串的长度。 void main() int j=0; char str1=“string.”; while(str1j!=0) j+; printf(“the lenth of str1=%d”, j); ,#include “string.h”,printf(“the lenth of str1=%d”, strlen(str1);,第 18 页,字符串处理函数,2、字符串复制(拷贝)函数strcpy()。调用形式如下: strcpy(s1,s2) 此函数用来把s2所指字符串(源)的内容复制到s1所指存储空间(目的)

15、中,函数返回s1的值,即目的串的首地址。注意:为保证复制的合法性,s1必须指向一个足够容纳s2串的存储空间。,strcpy函数的应用: char str16,str2=“China”; strcpy(str1,str2); 或 strcpy(str1, “China”); 两个字符串拷贝不能使用: str1=str2,字符串拷贝时连同0一起拷贝。,第 19 页,字符串处理函数,3、字符串连接函数strcat()。strcat函数的调用形式如下: strcat(s1,s2); 该函数将s2所指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的0;函数返回s1地址值。s1所指字符串应有

16、足够空间容纳两串合并后的内容 。,strcat函数的应用: char str120=“This is a ”; char str2=“string.”; printf(“%s”, strcat(str1,str2); ,运行结果:This is a string.,第 20 页,字符串处理函数,4、 字符串比较函数strcmp()。函数的调用形式如下: strcmp(s1,s2); 该函数用来比较s1和s2所指字符串的大小。若串s1串s2,函数值大于0;若串s1=串s2,函数值等于0;若串s1串s2,函数值小于0(负数)。 字符串的比较方法是:依次对s1和s2所指字符串对应位置上的字符两两进行

17、比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(字符大小的依据是其ASCII码值)。,char str1=“Chinese”,str2=“China”; r=strcmp(str1,str2); r=strcmp(str1, “string”); r=strcmp(“string”, “strong”); if(strcmp(str1,str2)=0),两个字符串比较不能使用: if(str1=str2),第 21 页,小结(1),数组是一种整体定义、个别使用的数据结构。数组的整 体特征,在定义一个数组的语句中已经得到了最完整的说明。作为使用的个体,数组中的每个元素都有如下特

18、征: 每个数组元素相当于一个同类型简单变量,但又不是孤立的一个简单变量。它是属于一个整体中的一员,这从数组元素的表示方法中可体现出。 数组元素引用的方法是: 数组名下标 数组名是整体特征,而下标是个体表现。这种使用下标对数组元素进行引用的方法称“下标法”。应该说明一点的是,对数组元素的引用方法除下标法外,还有所谓“指针法”,这将在后续章节中介绍。,第 22 页,小结(2), 数组名是地址常量 当程序中定义了一个数组后,系统将会为数组在内存分配一连续内存空间,数组元素按顺序号由小到大依次对应各存储单元,元素a0的地址就是数组的首地址。C语言用数组名来表示这一地址,这是一个地址常量。因此,数组名不能出现在赋值语句中赋值号的左端。 一般而言,C语言中只能逐个引用数组元素,而不能使用数组名一次引用整个数组(字符数组除外)。,第 23

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论