




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计,课件制作: 新科电脑培训中心 唐绍国制作,全国计算机等级考试 二级教程,第十章 字符串,本章要点 1、用一个一维字符数组来存放字符串 (1)通过赋初值的方式给一维字符数组赋字符串 (2)在C程序执行过程中给一维字符数组赋字符串 2、使指针指向一个字符串 (1)通过赋初值的方式使指针指向一个字符串 (2)通过赋值运算使指针指向一个字符串 (3)用字符数组作为字符串和用指针指向一个字符串之间的区别 3、字符串的输入和输出 (1)输入和输出字符串的必要条件 (2)用格式说明符%s进行整串的输入和输出 (3)调用gets、puts函数,从终端进行字符串行的输入和输出 4、字符串数组 5
2、、用于字符串处理的函数,用一个一维字符数组来存放字符串,1、C语言中对字符串的约定 字符串是借助字符型一维数组来存放的,并规定:以字符0作为“串结束标志” 2、C语言中表示字符串常量的约定 C语言中没有“字符串数据类型”,但却允许使用“字符串常量”。 3、C语言中字符串给出的是地址值 -字符串常量在内存中占一串连续的存储空间 -它实际上是个无名的字符型一维数组 -编译系统给出的是该存储空间的首地址 4、字符数组与字符串的区别 (1)字符数组的每个元素中可存放一个字符,但它并不限定最后一个字符应该是什么;而字符串的最后一个字符必须是0(串结束标志)。 (2)在字符数组的有效字符后加上0这一特定的
3、情况下,可以把这种一维字符数组“看作”字符串变量,但它又不同于一般的变量(仅可以在字符数组内存放字符串,不能通过赋值语句将字符串常量或其他字符数组中的字符串直接赋给字符串变量)。,通过赋初值的方式给一维字符数组赋字符串,1、用给一般数组赋初值的相同方式给一维字符数组赋初值 方法:把所赋初值依次放在一对花括号内, 如: char str10=s, t ,r,i, n, g ,!, 0, 0, 0 ; 赋值后str中的内容如图所示:,说明: 所赋初值个数少于数组元素个数时,系统将自动在其后的元素中加入0。因此,在以上赋初值时去掉最后的0,效果是一样的。所以,如果一个字符数组是用来作为字符串使用的,
4、那么在定义该字符数组时,数组的大小就应该比它将要存放的最长字符串多一个元素,多出来的元素用于存放字符串结束标志0 。 如果字符数组省略了下标,则赋初值时一定要人为加上“串结束标志” 比如: char str2 = s, t ,r,i, n, g ,!, 0;,2、赋赋初值时直接赋字符串常量 例如: char str10=“string!”; 可以省略花括号而直接写成:char str10=“string!”; 说明: (1)这里的“string!”是字符串常量,系统已自动在最后加入0,所以不必人为加入。 (2)由于定义了str数组占有10个连续的存储单元,因此有足够的空间存放字符串。但如果定义
5、成: char str7=“string!”; 则7个单元空间不够用,0将占用下一个不属于str的存储单元,它有可能会破坏其他数据或程序代码。 这时,我们可以采用以下的形式定义: char str =“string!” 由于省略了数组下标,系统将按该字符串常量的实际字符数(这里是8)来定义数组的大小。,在C程序执行过程中给一维字符数组赋字符串,1、不可以用赋值语句给字符数组整体赋一串字符 例如:char mark10; mark=“c program”; /*赋值不合法宝*/ 说明:数组名是一个地址常量,它指向数组的首地址,不能被重新赋值。 以下的赋值方式也是错误的: char str110=
6、“computer”,str210; str2=str1; /*赋值不合法*/ 同样的道理,str2是数组名,不可以重新赋值。,2、给数组元素逐个赋字符值,最后人为加入串结束标志 方法:通过循环语句给一维字符数组元素逐个输入字符并在最后加入0。 例如: char s10; int I; for(i=0;i9;i+) scanf(“%c”, 说明: 使用该方法显得比较繁琐,操作起来很不方便。在C语言中,我们可以利用编译系统所提供的、专门针对字符串处理的各种函数实现字符串的输入输出等操作。,使指针指向一个字符串,1、通过赋初值的方式使指针指向一个字符串 实质:将存放字符串的存储单元的首地址赋给指针
7、变量。 例如:char *ps1=“from one”; 说明:把存放字符串常量“from one”无名存储区的首地址赋给指针变量ps1,使ps1指向了字符串的第一个字符f。注意:不要误认为把字符串常量赋给了指针。 也可以以下面的方式赋值: char str =“from one “,*ps2; ps2=str; 说明:把存放字符串的字符数组str的首地址赋给指针变量ps2,使ps2指向了字符串的第一个字符f。此语句与ps2=是等价的。,通过赋值运算使指针指向一个字符串,如果已经定义了一个字符型的指针变量,可以通过赋值运算将某个字符串的首地址赋该指针变量,使它例向一个具体的字符串。 例如: c
8、har *ps1; ps1=“from one”; 说明:这里也是将存放字符串常量的首地址赋给了ps1,用字符数组作为字符串和用指针指向一个字符串之间的区别,若有以下定义: char mark =“C program”; char *pmark=“C program”; 说明: mark是一个字符数组,通过赋初值,系统为它开辟了刚好能存放以上字符序列再加0的存储空间(10个字符),可以通过marki这样的形式来引用字符串中的每个字符,在这个数组内,字符串的内容可以改变,但mark总是引用固定的存储空间,且最多只能存放含有个字符的字符串; 而pmark是一个指针变量,通过赋初值,使其指向一个字符
9、串常量,即:指向一个无名的字符数组。注意:mark数组中的字符串内容虽然与pmark所指字符串内容相同,但这两个字符串分别占有不同的存储空间。也可以通过pmarki这样的形式来引用字符串常量中的每个字符,但指针变量中的地址可以改变而指向另外上的字符串,另处的字符串的长度不受限制,一旦pmark指向另外的字符串,如果没有另外的指针指向原来的字符串,则此字符串将丢失,其所占用的存储空间就再也无法引用。,字符串的输入和输出,对于字符串,可以利用c格式说明或用字符输入、输出函数逐个输入、输出字符; 输入时在最后人为添加0,输出时用0作为输出结束标志。此外,c语言提供了进行整串输入和输出的格式说明符%s
10、和串输入、输出函数。 输入和输出字符串时的必要条件 输出字符串时:输出项即可是字符串或字符数组名,也可以是已指向字符的字符指针变量。 输入字符串时:输入项可以是字符数组名,也可以是字符指针。当用字符数组名作为输入项时,输入的字符串将存放在字符数组中,因此,字符数组应有足够大的存储空间。当使用指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间,以便使输入的字符串能够放在其所指的具体的内存单元中。,用格式说明符%s进行整串输入和输出,、在scanf函数中使用格式说明符%s可以实现字符串的整体输入。调用形式如下: scanf(“%s”,str_adr) 这里str_adr是地址值。调用此
11、函数时,输入字符依次放入以这一地址为起点的存储单元,并自动在末尾加0。Str_adr可以是数组名、字符指针或字符数组元素的地址。例如: char str15; scanf(“%s”,str); 说明: (1)用s格式符输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入。 (2)若输入字符串的长度超过字符数组所能容纳的字符个数时,系统并不报错。,(3)当输入项为字符指针时,该指针必须已指向确定的有足够空间的连续存储单元。 (4)当输入项是数组元素的地址时,输入数据将从这一元素开始存放。 、在printf函数中使用格式说明符s可以实现字符串的整体输出,函数调用形式如下: printf(“
12、%s”,str_adr); 此处的str_adr是地址值。调用printf函数时,将从这一地址开始,依次输出存储单元中字符,直到遇到第一个0为止。0是结束标志,不要输出字符之列。输出结束后不自动换行。,调用gets、puts 函数,从终端进行字符串行的输入和输出,调用gets和puts 函数时,必须在程序开头出现包含头文件“stdio.h”的命令行。 、gets函数的调用形式如下: gets(str_adr) 其中str_adr是存放输入字符串的起始地址。可以是字符数组名、字符指针或字符数组元素地址。Gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。换行符读入后,不作
13、为字符串的内容。系统将自动用0代替。 例如: char str20; gets(str);,2、puts函数的调用形式如下: puts(str_adr) 其中str_adr是存放待输出字符串的起始地址。调用puts函数时,将从这一地址开始,依次输出存储单元中的字符,遇到第一个0即结束输出,并自动输出一个换行符。 例如: char str20“string!”; puts(str);,字符串数组,概念:数组中的每个元素又都是一个存放字符串的数组。 例:char name1080; 这是一个字符型的二维数组,可以把它看成是由10个一维数组所组成的(即name数组由10个元素组成);其中每一个元素又
14、包含了80个元素,可以存储80个字符。(作为字符串使用时最多可以存储79个有效字符,最后一个存储单元留给0。) 因此,可以认为:二维字符数组的第一个下标决定了字符串的个数;第二个下标决定了字符串的长度。,字符串数组可以在定义的同时赋初值,例:char str35=“a”, “bb”, “ccc”; 也可以写成: char str 5=“a”, “bb”, “ccc”; 赋值后各元素在数组中的存储情况如右图所示:,Str00,Str0,Str1,Str2,数组元素按行占连续的固定存储单元,由图可知,其中有些存储单元是空闲的,各字符串并不一串紧挨着一串存放,总是从每行的第个元素或开始存放一个新的串
15、。可以通过二维数组元素的形式、如str12等来引用字符串中的每一个字符。,、可以定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。例如: char *pa3=“a”, “bb”, “ccc”; 这一数组的存储结构如图所示:,这里,指针元素指向长度不同的无名一维字符数组,名字符之间并不占连续的存储单元,它们的连系全依赖于pa指针数组元素;一旦pa指针数组元素中的地址被重新赋值,如果没有其它指针指向相应的字符串,则相应的字符串将丢失。 由于指针数组元素已指向确定的存储空间,因此,也可以用输入语句给这些字符串重新赋值。例如: gets(pa2); 注意:pa2 中的地址未变,仍指向个元素的无
16、名字符数组,执行以上语句时只能在一行上输入包含个字符的字符串。 可以用表达式:*(pa2+i)的形式引用pa数组所指字符串中的字符。,用于字符串处理的函数,使用这些函数时,必须在程序前面,用命令行指定包含头文件“string.h” 1、字符串复制(拷贝)函数。调用形式如下: strcpy(s1,s2) 作用:把s2所指字符串的内容复制到s1所指的存储空间中,函数返回s1的值(地址)。注意:s1必须指向一个足够容纳s2串的存储空间。 、字符串连接函数。调用形式如下: strcat(s1,s2) 作用:将s2所指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的0,函数返回s1的地址值。注意:s1所指字符串应有足够容纳两串合并后的内容。,、求字符串长度函数。调用形式如下:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 邮储银行2025威海市秋招笔试性格测试题专练及答案
- 工商银行2025三沙市数据分析师笔试题及答案
- 2025年3D打印技术的材料
- 工商银行2025忻州市信息科技岗笔试题及答案
- 交通银行2025沈阳市数据分析师笔试题及答案
- 交通银行2025四平市笔试行测高频题及答案
- 2025行业全球市场发展策略
- 2025数字乡村建设与行业发展报告
- 中国银行2025七台河市秋招笔试英语题专练及答案
- 建设银行2025太原市小语种岗笔试题及答案
- 《发芽小麦粉气流分级产品及其面筋蛋白品质的研究》
- 2025年危险化学品经营单位主要负责人安全生产全国考试题库(含答案)
- 青岛版五四制科学五年级上册科学学生活动手册参考答案
- 社区街道网格员安全培训
- 反诈知识竞赛题库及答案(共286题)
- 村卫生室医疗废物管理制度
- GB/T 44698-2024电动踝关节
- 生理学基础题库(46道)
- 月度财务分析报告(3篇)
- 华文版六年级上册书法教案
- 物流消防应急预案
评论
0/150
提交评论