




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章重点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 字符串常量C语言中 无字符串数据类型 但允许使用字符串常量 C语言中 字符串常量给出的是地址值 不同的字符串具有不同的起始地址 即在C语言中 字符串常量被隐含处理成一个以 0 结尾的无名字符型一维数组 3 字符数组与字符串的区别 1 字符数组的每个元素中可存放一个字符 但它并不限定最后一个字符应该是什么 2 在字符数组中的有效字符后面加上 0 把这种一维字符型数组 看做 字符串变量 但它又不同于一般的变量 仅可以在字符数组内存放字符串 不能通过赋值语句将字符串常量或其它字符数组中的字符串直接赋给字符串变量 3 字符串是字符数组的一种具体应用 10 1 2通过赋初值的方式给一维字符数组赋字符串1 字符数组的定义字符数组的定义与一般数组的定义类似 其一般定义形式为 char数组名 常量表达式 其中 char是字符数组的类型 常量表达式给出字符数组长度即字符个数 每个数组元素是一个字符 例如 charstr 10 定义str为字符数组 它包括10个元素 可以存放10个字符 2 用给以一般数组赋初值的相同方式给一维字符数组赋初值按照一维数组的赋初值的方式 把初值依次放入一对花括号内 3 在赋初值时直接赋字符串常量可以直接用字符串常量给一维数组赋初值 例如 charstr 10 string 或charstr 10 string 此时 由于 string 是字符串常量 系统已自动在最后加入了 0 若有如下定义 charstr string 则数组str将包含7个元素 4 在C程序执行过程中给字符数组赋字符串在程序执行过程中 可以通过逐个给数组元素赋值的方式 给一维字符数组赋字符串 例如 charstr 5 str 0 g str 1 o str 2 o str 3 d str 4 0 10 2使指针指向一个字符串10 2 1通过赋初值的方式使指针指向一个字符串可以在定义字符指针变量的同时 将存放字符串的存储单元起始地址赋给指针变量 也可以先定义一个存放字符串的字符数组 并将数组的首字地址赋给指针变量 10 2 2通过赋值运算使指针指向一个字符串若已定义一个字符指针变量 可以通过赋值运算将某个字符串的起始地址赋给它 从而使其指向一个具体的字符串 10 2 3通过赋值运算使指针指向一个字符串若有以下定义 chararray hello char parray hello 虽然字符串的内容相同 但它们占有不同的存储空间 1 mark是一个字符数组 通过赋初值 系统为它开辟了刚好存放以上字符序列再加 0 的存储空间 10个字符 而pmark是一个字符指针 通过赋初值 使其指向一个字符串常量 2 在这个数组内 字符串的内容可以改变 但array总是引用固定的存储空间 最多只能存放有6个字符的字符串 10 3字符串的输入和输出10 3 1输入和输出字符串时的必要条件1 对字符串进行输出时 输出项既可以是字符串或字符数组名 也可以是已指向字符串得字符指针变量 2 对字符串进行输入时 输入项可以是字符数组名 也可以是字符型指针 前者输入的字符串将存放在字符数组中 因而字符数组应具有足够的存储空间 而对于后者 字符指针必须指向确切的足够大的存储空间 以便输入的字符串能购存放在其所指向的具体的内存单元中 10 3 2字符串的输入除了可以用初始化的方法使字符数组得到确定的初值以外 还可以通过scanf函数或gets函数输入字符或字符串 通常有以下三种方法 1 使用格式符 c 通过scanf函数 逐个字符输入 如例 charc 10 scanf c c 0 表示向数组元素c 0 输入一个字符 其用法与普通变量输入相同 2 使用格式符 s 通过scanf函数 将整个字符串一次输入 例如 charc 10 scanf s c 从键盘输入 student系统把回车键前面的字符作为字符串存入c数组 并自动在后面加一个 0 结束符 这时输入给c数组的字符个数是8而不是7 3 使用专门的标准字符串输入函数gets 将整个字符串一次输入 调用方式为 gets 字符数组 1 gets函数属于标准输入输出函数类 调用时应使用 stdio h 头文件做函数说明 2 用gets函数只能输入一个字符串 10 3 3字符串的输出字符串 或字符数组 的输出可以通过printf函数及puts函数实现 通常有三种方法 1 使用格式符 c 通过printf函数 引用字符串中的单个字符 逐个字符输出 2 使用格式符 s 通过printf函数 将整个字符串一次输出 例如 charc good printf s c 输出时 遇到结束符 0 就停止输出 1 输出字符串中不包含结束符 0 尽管数组c中最后一个元素是 0 但并不输出该字符 2 如果数组长度大于字符串实际长度 也只输出到遇第一个 0 时就结束 例如charc 10 good printf s c 也只输出 good 4个字符 而不输出10个字符 数组长度 3 使用格式符 s 输出字符串时 printf函数中的输出项是字符数组名 并不是数组元素 4 如果printf中输入项字符数组中包含一个以上 0 字符 则输出遇到第一个 0 时就结束 输出时 遇到结束符 0 就停止输出 1 输出字符串中不包含结束符 0 尽管数组c中最后一个元素是 0 但并不输出该字符 2 如果数组长度大于字符串实际长度 也只输出到遇第一个 0 时就结束 例如charc 10 good printf s c 也只输出 good 4个字符 而不输出10个字符 数组长度 3 使用格式符 s 输出字符串时 printf函数中的输出项是字符数组名 并不是数组元素 4 如果printf中输入项字符数组中包含一个以上 0 字符 则输出遇到第一个 0 时就结束 3 使用专门的标准字符串输出函数puts 将整个字符串一次输出 调用方式为 puts str 将一个字符串 以 0 结束的字符序列 输出到终端 str是存放待输出字符串的起始地址 输出正常时 返回值为字符串的最后一个字符 也有的系统返回换行符或0 输出出错时 返回EOF 注意 在输出时将字符串结束标志 0 转换成 n 即输出完字符串后自动换行 用puts函数输出的字符串中可以包含转义字符 10 4字符串数组1 字符串数组的定义字符串数组就是数组中的每个元素又都是一个存放字符串的数组 例如 charstr 4 8 father mother brother sister 数组str共有4个元素 每个元素又可以存放8个字符 在定义字符串数组时就可以给它赋初值 二维字符数组的第一个下标决定了字符串的个数 第二个下标决定了字符串的最大长度 上面的定义也可以写成 charstr 8 father mother brother sister 存放数组元素时 各字符串并不是一串紧挨着一串存放 而总是从每行的第0各元素开始存放一个新的字符串 可以通过二维数组元素的形式 如str i j 来直接引用字符串中的每个字符 2 定义字符型指针构成类似的字符串数组我们还可以通过定义字符型指针数组并通过赋初值来构成一个类似的字符串数组 例如 char p 3 a bb ccc 指针数组p的每个元素指向一个字符串 即p的每个元素中存放着一个字符串的首地址 此时 指针元素指向长度不同的无名一维字符数组 各字符数组之间并不占连续的存储单元 它们的联系全依赖与p指针数组元素 一旦p指针数组中的元素地址被重新赋值 则相应的字符串将丢失 由于指针数组元素已指向确定的存储空间 因此可以用输入语句给这些字符串重新赋值 如 gets p 2 10 5用于字符串处理的函数C语言的库函数中提供了丰富的字符串处理函数 除了上面已介绍的输入输出的gets和puts函数外 还有一些其他专门字符串处理函数 这些函数存贮在文件 string h 中 因此 若使用它们 应在程序之前加写如下编译预处理语句 include下面介绍几种常用的字符串处理函数 1 字符串复制函数作用是把一个字符串全部或部分复制到另一个字符串尾部 其基本函数有两个 1 strcpy 字符数组1 字符串2 功能 把字符串2复制到字符数组1中去 即给一个字符数组赋值 2 strncpy 字符数组1 字符串2 n 此函数的作用是将字符串2的前n个字符复制到字符数组1中去 2 字符串连接函数功能 把两个字符串连接在一起 组成一个字符串 这类函数也有两个 strcat 字符数组1 字符数组2 例如 charstr1 20 hello charstr2 everyone printf s strcat str1 str2 输出 helloeveryone 说明 1 字符数组1必须足够大 以便容纳连接后的新字符串 2 连接前两个字符串的后面都有一个 0 连接时前一个字符串1的结束符 0 被取消 只在新字符串末尾保留一个 0 strncat 字符数组1 字符数组2 n 该函数的作用是把字符数组2上的前n个字符连接到字符数组1上 函数调用后返回字符数组1的地址 3 字符串比较函数功能 取两个字符串的全部或部分按字典顺序比较 基本函数有两个 strcmp 字符串1 字符串2 按字典顺序比较字符串1和字符串2 即对两个字符串自左至右逐个字符相比较 按ASCII码值大小比较 直到出现不同的字符或遇到 0 为止 比较结果返回一个函数值 如果 1 字符串1 字符串2 函数返回值为0 2 字符串1 字符串2 函数返回一个正数 3 字符串1 字符串2 函数返回一个负数 4 字符串长度测试函数strlen 字符串 功能 测试字符串的实际长度 返回值为字符串的实际长度 其中不包括结束符 0 例如 charc 10 hello printf d strlen c 输出结果是5 不是6也不是7 也可以直接测字符串常量的长度 如 strlen Whatisyourname 5 字符串大小写转换函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 聘用ktv员工合同范本
- 污水委托处理协议合同书
- 游泳健身培训合同协议书
- 物业与万达合作协议合同
- 食品事故赔偿协议书范本
- 电厂采购密封件合同范本
- 结石科合作协议合同范本
- 村道维修承包合同协议书
- 离职协议代签协议书范本
- 物业的车位买卖合同协议
- 医共体人事编制管理办法
- 小儿肛周脓肿护理
- 医院法律法规培训内容
- 山东畜牧兽医单招考试题及答案
- 玉米杂交种子质量控制与高效制种技术的应用探索
- 2025年 北京海淀区招聘社区工作者考试笔试试卷附答案
- 商户安全生产培训课件
- 【扶臂式挡土墙迎水坡和背水坡堤防整体抗滑稳定计算案例1200字】
- 四川省广元市2024-2025学年第二学期八年级期末考试数学试卷(无答案)
- 死亡病例讨论制度落实与质控优化
- 痛经的中医护理
评论
0/150
提交评论