




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第十章字符串及其操作 内容提要 本章主要包括以下几个内容 概述字符与字符串字符数组与字符串字符串作为函数参数应用举例 10 1引言 字符串是C语言中最有用而且最重要的数据结构之一 printf WelcometoCprogramming 其中 传递给函数printf的参数就是一个字符串 双引号被用作字符串的边界符号 其中可以包含除了双引号之外的任何字母 数字以及特殊字符的任意组合 如果在字符串中要包含双引号 可用前面所讲的转义字符 用双引号括起来的字符序列 其长度可大于1 如 Howdoyoudo CHINA a 123 34 等可以使用 define来定义字符串常量一个字符变量只能存放一个字符 它的定义形式如 charc1 c2 在内存中字符变量的存储形式是ASCII码注意区分 和 前面章节中已经学习了字符常量 字符变量 字符串常量 到目前为止我们还没有使用过字符串变量C语言中没有字符串变量 而是以字符数组来表示 10 2字符与字符串 10 3字符数组与字符串 字符数组与字符串的关系字符数组数据类型为char的数组charstring 80 字符串特殊的字符数组 字符数组的最后一个元素为 0 字符串只是一种特殊的字符数组 一个新的名词或概念 不是一种新的数据类型 在C语言中字符串有一套特殊的表示方法和处理方法 字符数组的初始化 1 用字符型数据逐个对数组进行初始化charstr 6 C h i n a 0 2 用字符串常量直接对数组初始化charstr 6 China charstr 6 China 以 0 结尾的字符数组 用双引号括起表示字符串常量 C语言自动为其添加 0 终结符在字符串初始化时 C语言允许采用 将一串字符一次赋给字符数组 10 3 1字符数组的定义与初始化 用二维数组存放字符串charstr 10 Sunday Monday Tuesday Wednesday Thursday Friday Saturday 0行1行 6行 0列1列 9列 对数组定义时 切记要给出足够长度 10 3 1字符数组的定义与初始化 10 3 2字符串与指针 字符串在内存中的起始地址称为字符串的指针 可以定义一个字符指针变量指向一个字符串 在 语言中 既可以用字符数组表示字符串 也可用字符指针变量来表示 引用时 既可以逐个字符引用 也可以整体引用 1 逐个引用 exp10 1 includemain char string IloveBeijing for string 0 string printf c string printf n 程序运行结果 IloveBeijing 程序说明 char string IloveBeijing 该语句定义并初始化字符指针变量string 用串常量 IloveBeijing 的地址 由系统自动开辟 存储串常量的内存块的首地址 给string赋初值 该语句也可分成如下所示的两条语句 char string string IloveBeijing 注意 字符指针变量string中 仅存储串常量的地址 而串常量的内容 即字符串本身 是存储在由系统自动开辟的内存块中 并在串尾添加一个结束标志 0 10 3 2字符串与指针 2 整体引用采取整体引用的办法 改写上例 exp10 2 includemain char string IloveBeijing printf s n string 程序说明 printf s n string 语句通过指向字符串的指针变量string 整体引用它所指向的字符串的原理 系统首先输出string指向的第一个字符 然后使string自动加 使之指向下一个字符 重复上述过程 直至遇到字符串结束标志 10 3 2字符串与指针 注意 其它类型的数组 是不能用数组名来一次性输出它的全部元素的 只能逐个元素输出 例如 intarray 10 printf d n array 这种用法非法 字符指针变量与字符数组之比较虽然用字符指针变量和字符数组都能实现字符串的存储和处理 但二者是有区别的 不能混为一谈 10 3 2字符串与指针 字符指针变量与字符数组的主要区别 1 存储内容不同 字符指针变量中存储的是字符串的首地址 而字符数组中存储的是字符串本身 数组的每个元素存放一个字符 2 赋值方式不同 对字符指针变量 可采用下面的赋值语句赋值 char pointer pointer Thisisaexample 而字符数组 虽然可以在定义时初始化 但不能用赋值语句整体赋值 下面的用法是非法的 charchar array 20 char array Thisisaexample 非法用法 3 指针变量的值是可以改变的 字符指针变量也不例外 而数组名代表数组的起始地址 是一个常量 而常量是不能被改变的 10 3 2字符串与指针 10 3 2字符串与指针 字符数组与指针变量的用法总结 1 逐个输入输出字符数组for i 0 i 10 i Str i getchar putchar Str i 声明charStr 10 用于存储字符 最多10个用于存储字符串 最多9个 10 3 3字符串的输入输出 为什么 字符串for i 0 i 9 i scanf c 2 一次性输入输出scanf s Str printf s Str gets s s puts s s 注意 字符串含有空格 回车或Tab符号 不能用scanf s 读入 而gets 可以 printf s 遇到字符数组中 0 停止输出 输入字符串时要当心 写入的位置是否正确 可能死机 10 3 3字符串的输入输出 再谈定义数组长度问题 对以下程序输入 SundayMondayTuesdayWednesdayThursdayFridaySaturday 思考其运行结果是什么 exp10 3 includevoidmain charWeekday 7 7 inti for i 0 i 7 i scanf s Weekday i printf s Weekday i 10 3 4常用的字符串处理函数 字符串的处理一般借助字符串处理函数 在中定义了若干专门的字符串处理函数 如 strcpy stringcopystrcmp stringcomparisonstrcat stringcombinationstrlen stringlength使用前需要加上 include 10 3 4常用的字符串处理函数 strcpy stringcopy用法 strcpy 字符数组 字符串2 原型 char strcpy char dest constchar src 用途 将字符串2拷贝到字符数组中 相当于赋值语句 例如 charstr1 10 str2 China strcpy str1 str2 字符数组1必须是写成数组名 字符数组2可以是数组名也可以是一个字符串 又如 strcpy str1 china 10 3 4常用的字符串处理函数 不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组 但可以给一个字符变量或字符数组元素赋值 如下面的赋值是不合法的 charstr1 China str2 20 str2 str1 下面的赋值是合法的 chara 5 c1 c2 c1 A c2 B a 0 C a 1 h a 2 i a 3 n a 4 a 7 4字符数组 strcmp stringcomparison用法 strcmp 字符串1 字符串2 原型 intstrcmp constchar s1 constchar s2 用途 当出现第一对不相等的字符时 就由这两个字符决定所在字符串的大小比较两个字符串的大小 ASCII值大的为大 零 两个串相等返回值 正数str1 str2负数str1 str2注意 两个字符串不能用关系运算符比较 如下面的写法是不合法的 if str1 str2 printf yes 应写成if strcmp str1 str2 0 printf yes 10 3 4常用的字符串处理函数 strcat stringcatenate用法 strcat 字符串1 字符串2 原型 char strcat char dest constchar src 用途 把两个字符串连接在一起 组成一个字符串 字符数组2中的字符串连接到字符数组1中的字符串后面 并删去原字符数组1后面的 0 最后将结果存在字符数组1中 例如 charstr1 Ch str2 ina strcat str1 str2 结果 str1成了 China 而str2不变 10 3 4常用的字符串处理函数 strlen stringlength用法 strlen 字符数组 或字符串 原型 size tstrlen constchar s 用途 测试字符串的实际长度 其中不包括 0 例如 charstr1 China printf d strlen str1 结果 输出5 可以采用多种形式 如 实参和形参均为数组 均为指针等 但其本质都是一样的 参考前面章节中所掌握的关于指针的知识 可以加深理解 与数组名作函数参数一样 字符串作为函数参数时 不是单向值传递 而是把实参数组的起始地址传递给形参数组 这样两个数组共占同一段内存单元 形参的改变会导致实参的改变 这种传递方式叫 地址传送 10 4字符串作为函数参数 用函数调用方式 实现字符串的复制 exp10 4 voidstring copy char str from char str to inti 0 for str to i str from i 0 i voidmain chararray str1 20 Iamateacher chararray str2 20 string copy array str1 array str2 数组名作实参 printf array str2 s n array str2 10 4字符串作为函数参数 程序说明for str to i str from i 0 i 语句的执行过程为 首先将源串中的当前字符 复制到目标串中 然后判断该字符 即赋值表达式的值 是否是结束标志 如果不是 则相对位置变量i的值增1 以便复制下一个字符 如果是结束标志 则结束循环 其特点是 先复制 后判断 循环结束前 结束标志已经复制 在C语言中 用赋值运算符 而不是单独的赋值语句来实现赋值操作 能给某些处理带来很大的灵活性 该语句 实现字符串的复制 的用法就是最好的例证 10 4 2字符串指针作函数参数 10 5程序举例 使用字符数组来解决猜谜问题 exp10 5 include defineANSWER Grant voidmain chartry 40 puts WhoisburiedinGrant stomb gets try while try ANSWER 进行判断 puts No that swrong Tryagain gets try puts That sright 该程序的问题在那里 WhoisburiedinGrant stomb Tom No that swrong Tryagain Grant No that swrong Tryagain 10 5程序举例 正确的程序 exp10 5 1 include defineANSWER Grant voidmain chartry 40 puts WhoisburiedinGrant stomb gets try while strcmp try ANSWER 0 判断的正确方法 puts No that swrong Tryagain gets try puts That sright 10 5程序举例 从键盘任意输入5个学生的姓名 编程找出并输出按字典顺序排在最前面的学生姓名等价于求最小字符串 exp10 6 include include defineARRA SIZE80main intn num charstr ARRA SIZE min ARRA SIZE printf Pleaseenterfivenames n gets str strcpy min str for n 1 n 5 n gets str if strcmp str min 0 strcpy min str printf Theminis puts min 本章小结 本章主要介绍了一种特殊的数组 字符串的用法 和一般的数组不同 字符串具有不同的特点 1 关于定义和初始化字符串方法有 使用字符串常量 defineFUN Hello 使用字符数组 charfun 10 Hello
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐专业听力试题及答案
- 黑吉辽蒙金太阳2026届高三9月开学联考(26-1002C)地理试题及答案
- 安徽省九师联盟2026届高三9月开学联考政治(含答案)
- 《烹饪原料初加工工艺》项目一刀工与原料成形
- 钻石专业试题及答案大全
- 路面施工方案反光衣
- 库房物资搬运施工方案
- 地产开发合作协议示例
- 楼顶油漆施工方案
- DB32-T 4451.10-2023 医用影像设备临床使用管理与质量控制规范 第10部分:超声成像设备
- 九年级化学人教版基于特定需求设计和制作简易供氧器(教学设计)
- SCAMPER创新思维模型
- 乡镇庆中秋迎国庆活动方案
- 山东科学技术出版社小学一年级上册综合实践活动教案
- 2024口腔医学专业考核标准
- 大型群众性活动安全许可申请表
- 小学数学人教版-六年级上-第一单元-分数乘法-教材分析
- 百融云创风险决策引擎V5产品操作手册
- DZ∕T 0033-2020 固体矿产地质勘查报告编写规范(正式版)
- 思念混声合唱简谱
- 家庭健康指导员培训方案及流程
评论
0/150
提交评论