全国计算机等级考试实用应试教程二级c语言 第10章 字符串

上传人:子 文档编号:51643526 上传时间:2018-08-15 格式:PPT 页数:29 大小:337.50KB
返回 下载 相关 举报
全国计算机等级考试实用应试教程二级c语言 第10章  字符串_第1页
第1页 / 共29页
全国计算机等级考试实用应试教程二级c语言 第10章  字符串_第2页
第2页 / 共29页
全国计算机等级考试实用应试教程二级c语言 第10章  字符串_第3页
第3页 / 共29页
全国计算机等级考试实用应试教程二级c语言 第10章  字符串_第4页
第4页 / 共29页
全国计算机等级考试实用应试教程二级c语言 第10章  字符串_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《全国计算机等级考试实用应试教程二级c语言 第10章 字符串》由会员分享,可在线阅读,更多相关《全国计算机等级考试实用应试教程二级c语言 第10章 字符串(29页珍藏版)》请在金锄头文库上搜索。

1、本章重点 10.1 用一个一维字符数组来存放字符串 10.2 使指针指向一个字符串 10.3 字符串的输入和输出 10.4 字符串数组 10.5 用于字符串处理的函数 10.6 字符数组和字符串应用举例 第10章 字符串 10.1 用一个一维字符数组来存放字符串 10.1.1 字符串的相关概念 1字符串定义C语言本身并没有设置一种类型来定义字符串 变量,字符串的存储完全依赖于字符数组。字符 串是借助字符型一维数组来存放的,以0作为字 符串结束标志。0是一个转义字符,称为“空值” ,其ASCII码值为0。0作为标志占用存储空间, 但不计入字符串的实际长度。因此,定义时不需 要人为地在其末尾加入0

2、,编译程序会自动完成 这一工作。2字符串常量C语言中,无字符串数据类型,但允许使用字 符串常量。C语言中,字符串常量给出的是地址 值。不同的字符串具有不同的起始地址。即在C 语言中,字符串常量被隐含处理成一个以0结尾 的无名字符型一维数组。 3字符数组与字符串的区别(1)字符数组的每个元素中可存放一个字符,但 它并不限定最后一个字符应该是什么。(2)在字符数组中的有效字符后面加上0 把这种 一维字符型数组“看做”字符串变量,但它又不同 于一般的变量,仅可以在字符数组内存放字符串 ,不能通过赋值语句将字符串常量或其它字符数 组中的字符串直接赋给字符串变量。 (3)字符串是字符数组的一种具体应用。

3、 10.1.2 通过赋初值的方式给一维字符数组赋字符串 1字符数组的定义字符数组的定义与一般数组的定义类似。其一 般定义形式为:char 数组名常量表达式;其中,char是字符数组的类型,常量表达式给 出字符数组长度即字符个数,每个数组元素是一 个字符。例如:char str10;定义str为字符数组,它包括10个元素,可以存 放10个字符。 2用给以一般数组赋初值的相同方式给一维字符数 组赋初值按照一维数组的赋初值的方式,把初值依次放 入一对花括号内 3在赋初值时直接赋字符串常量可以直接用字符串常量给一维数组赋初值,例 如:char str10=“string”; 或char str10=

4、“string”;此时,由于“string”是字符串常量,系统已自动 在最后加入了0。若有如下定义:char str = “string”;则数组str将包含7个元素。4在C程序执行过程中给字符数组赋字符串在程序执行过程中,可以通过逐个给数组元素 赋值的方式,给一维字符数组赋字符串。例如:char str5;str0=g; str1=o; str2=o; str3=d; str4=0;10.2 使指针指向一个字符串 10.2.1 通过赋初值的方式使指针指向一个字符串可以在定义字符指针变量的同时,将存放字符 串的存储单元起始地址赋给指针变量。也可以先 定义一个存放字符串的字符数组,并将数组的首

5、字地址赋给指针变量。 10.2.2 通过赋值运算使指 针指向一个字符串若已定义一个字符指针变量,可以通过赋值运 算将某个字符串的起始地址赋给它,从而使其指 向一个具体的字符串 10.2.3 通过赋值运算使指针指向一个字符串 若有以下定义: char array=“hello!“; char *parray=“hello!“;虽然字符串的内容相同,但它们占有不同的存储 空间。 (1)mark是一个字符数组,通过赋初值,系统为 它开辟了刚好存放以上字符序列再加0的存储空 间(10个字符)。而pmark是一个字符指针,通 过赋初值,使其指向一个字符串常量。 (2)在这个数组内,字符串的内容可以改变,

6、但 array总是引用固定的存储空间,最多只能存放有 6个字符的字符串。 10.3 字符串的输入和输出 10.3.1 输入和输出字符串时的必要条件 1对字符串进行输出时,输出项既可以是字符串或 字符数组名,也可以是已指向字符串得字符指针 变量。 2对字符串进行输入时,输入项可以是字符数组名 ,也可以是字符型指针。前者输入的字符串将存 放在字符数组中,因而字符数组应具有足够的存 储空间。而对于后者,字符指针必须指向确切的 足够大的存储空间,以便输入的字符串能购存放 在其所指向的具体的内存单元中。 10.3.2 字符串的输入除了可以用初始化的方法使字符数组得到确定 的初值以外,还可以通过scanf

7、函数或gets函数输 入字符或字符串。通常有以下三种方法。 1使用格式符”%c”,通过scanf函数,逐个字符输 入。如例:char c10;scanf(“%c”,scanf(“%s”,c);从键盘输入:student系统把回车键前面的字符作为字符串存入c数 组,并自动在后面加一个0结束符。这时输入给 c数组的字符个数是8而不是7。 3使用专门的标准字符串输入函数gets,将 整个字符串一次输入。调用方式为:gets(字符数组); (1)gets函数属于标准输入输出函数类,调 用时应使用”stdio.h”头文件做函数说明。 (2)用gets函数只能输入一个字符串。 10.3.3 字符串的输出字

8、符串(或字符数组)的输出可以通过printf函 数及puts函数实现。通常有三种方法。1使用格式符”%c”,通过printf函数,引用字符 串中的单个字符,逐个字符输出。2使用格式符”%s”,通过printf函数,将整个字 符串一次输出。例如:char c=“good”;printf(“%s”,c); 。输出时,遇到结束符0就停止输出。(1)输出字符串中不包含结束符0。尽管 数组c中最后一个元素是0,但并不输出该 字符。(2)如果数组长度大于字符串实际长度, 也只输出到遇第一个0时就结束。例如char c10=“good”;printf(“%s”,c);也只输出“good”4个字符,而不输出1

9、0个 字符(数组长度)。(3)使用格式符”%s”输出字符串时,printf函数中 的输出项是字符数组名,并不是数组元素。 (4)如果printf中输入项字符数组中包含一个以上 0字符,则输出遇到第一个0时就结束。输出时 ,遇到结束符0就停止输出。 (1)输出字符串中不包含结束符0。尽管数组c中 最后一个元素是0,但并不输出该字符。 (2)如果数组长度大于字符串实际长度,也只输出 到遇第一个0时就结束。例如char c10=“good”;printf(“%s”,c);也只输出“good”4个字符,而不输出10个字符(数 组长度)。 (3)使用格式符”%s”输出字符串时,printf函数中 的输出

10、项是字符数组名,并不是数组元素。 (4)如果printf中输入项字符数组中包含一个以上 0字符,则输出遇到第一个0时就结束。 3使用专门的标准字符串输出函数puts,将整个字 符串一次输出。调用方式为:puts(str);将一个字符串(以0结束的字符序列)输出到 终端。str是存放待输出字符串的起始地址。输出 正常时,返回值为字符串的最后一个字符(也有 的系统返回换行符或0);输出出错时,返回EOF 。注意,在输出时将字符串结束标志0转换成n ,即输出完字符串后自动换行。用puts函数输出 的字符串中可以包含转义字符。 10.4 字符串数组 1字符串数组的定义字符串数组就是数组中的每个元素又都

11、是一个 存放字符串的数组。例如: char str48=“father”,”mother”,”brother”,”sister”;数组str共有4个元素,每个元素又可以存放8个 字符。在定义字符串数组时就可以给它赋初值。 二维字符数组的第一个下标决定了字符串的个数 ,第二个下标决定了字符串的最大长度。上面的定义也可以写成:char str 8= “father”,”mother”,”brother”,”sister”;存放数组元素时,各字符串并不是一串紧挨着一 串存放,而总是从每行的第0各元素开始存放一个 新的字符串。可以通过二维数组元素的形式(如 strij)来直接引用字符串中的每个字符。

12、2定义字符型指针构成类似的字符串数组我们还可以通过定义字符型指针数组并通过赋初 值来构成一个类似的字符串数组。例如:char *p3=“a”,”bb”,”ccc”;指针数组p的每个元素指向一个字符串,即p的 每个元素中存放着一个字符串的首地址。此时,指针元素指向长度不同的无名一维字符 数组,各字符数组之间并不占连续的存储单元, 它们的联系全依赖与p指针数组元素,一旦p指针 数组中的元素地址被重新赋值,则相应的字符串 将丢失。由于指针数组元素已指向确定的存储空间,因 此可以用输入语句给这些字符串重新赋值。如: gets(p2)10.5 用于字符串处理的函数C语言的库函数中提供了丰富的字符串处理函

13、 数,除了上面已介绍的输入输出的gets和puts函 数外,还有一些其他专门字符串处理函数,这些 函数存贮在文件”string.h”中。因此,若使用它们 ,应在程序之前加写如下编译预处理语句:#include 下面介绍几种常用的字符串处理函数。1字符串复制函数作用是把一个字符串全部或部分复制到另一个字符 串尾部。其基本函数有两个。(1) strcpy(字符数组1,字符串2)功能:把字符串2复制到字符数组1中去(即给一个 字符数组赋值)。(2)strncpy(字符数组1,字符串2,n)此函数的作用是将字符串2的前n个字符复制到字符 数组1中去。2字符串连接函数功能:把两个字符串连接在一起,组成一

14、个字 符串。这类函数也有两个。strcat(字符数组1,字符数组2)例如:char str120=hello”;char str2=“everyone”;printf(“%s”,strcat(str1,str2);输出:helloeveryone说明: (1)字符数组1必须足够大,以便容纳连接 后的新字符串。 (2)连接前两个字符串的后面都有一个0 ,连接时前一个字符串1的结束符0被取消 ,只在新字符串末尾保留一个0。strncat(字符数组1,字符数组2,n)该函数的作用是把字符数组2上的前n个字 符连接到字符数组1上,函数调用后返回字 符数组1的地址。 3字符串比较函数功能:取两个字符串的

15、全部或部分按字典顺序 比较。基本函数有两个。strcmp(字符串1,字符串2)按字典顺序比较字符串1和字符串2,即对两个 字符串自左至右逐个字符相比较(按ASCII码值大 小比较),直到出现不同的字符或遇到0为止。 比较结果返回一个函数值。如果:(1)字符串1字符串2,函数返回值为0。(2)字符串1字符串2,函数返回一个正数。(3)字符串1字符串2,函数返回一个负数。4字符串长度测试函数strlen(字符串)功能:测试字符串的实际长度,返回值为字符 串的实际长度,其中不包括结束符0。例如:char c10=“hello”;printf(“%d”,strlen(c);输出结果是5,不是6也不是7。也可以直接测 字符串常量的长度,如:strlen(“What is your name?”); 5字符串大小写转换函数该类函数可以对字符串中的字符进行大小写字 母间的转换。有两个类型。(1)strlwr(字符串)功能:将字符串中大写字母转换成小写字母。(2)strupr(字符串)功能:将字符串中小写字母转换成大写字母。10.6 字符数组和字符串应用举例 例1 输入一行字符,统计其中有多少个单词 (单词间以空格分隔,连续出现的空格记 为出现一次;一行开头的空格不算)。例 如,输入“I love you”,共3个

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号