




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 4 21 C语言程序设计教程 1 第十章字符串 10 1字符数组与字符串10 2指针与字符串 2020 4 21 C语言程序设计教程 2 10 1字符数组与字符串 10 1 1字符数组的定义与初始化1 字符数组的定义字符数组 其元素类型为字符类型的数组 其定义与前面介绍的数组定义相同 例如 charstr 40 定义一个有40个元素的字符数组 每个元素相当于一个字符变量 charch 5 30 2 字符数组的初始化charch1 a b c d charch2 6 a b charch3 10 0 2020 4 21 C语言程序设计教程 3 10 1 2字符串的概念及存储 1 字符串及其相关概念字符串 若干有效字符的序列 可包含转义字符 ASC 码表中的字符 形式为 用双引号括起来的字符序列 例 Iamastudent Hello a 5 f n 字符串的长度 字符串中所包含的字符的个数 空串 没有一个字符的串 空格串 包含一个或多个空格的串字符串的结束标志 0 注 字符串存放在字符数组中 2020 4 21 C语言程序设计教程 4 2 用字符串初始化字符数组直接把字符串写在花括号中来初始化字符数组 如 charch student 花括号可以省略系统将双撇号括起来的字符依次赋给字符数组的各个元素 并自动在末尾补上字符串结束标志字符 0 2020 4 21 C语言程序设计教程 5 几点说明 字符串结束标志 0 仅用于判断字符串是否结束 输出字符串时不会输出 在对有确定大小的字符数组用字符串初始化时 数组长度应大于字符串长度 如 chars 7 student 是错误的 如果花括号中提供的字符个数大于数组长度 则按语法错误处理 若小于 其余的元素自动赋初值为空字符 0 4 不能直接将字符串赋值给字符数组 若有定义chars 10 则下面的操作是错误的 s student 2020 4 21 C语言程序设计教程 6 10 1 3字符串的输入输出 1 字符串的输出方法 1 用printf函数用printf输出字符串时 要用格式符 s 输出时输出项表中对应的应是所要输出的字符串的起始地址 从该起始地址所对应的字符开始逐个字符输出 直到遇到第一个 0 为止 例 charst 15 Iamaboy printf s n s c st 注意 若用 s的格式输出字符串 输出项表中对应的应是所要输出的字符串的起始地址 或字符串常量 2020 4 21 C语言程序设计教程 7 例10 1字符串输出示例 includemain charstr 20 Howdoyoudo intk printf s str 输出str中的字符串 for k 0 str k 0 k printf c str k 一个一个地输出字符 输出结果为 Howdoyoudo Howdoyoudo 使用格式符 s 输出时 输出项表中对应的应是所要输出的字符串的起始地址 从该起始地址所对应的字符开始逐个字符输出 直到遇到第一个 0 为止 使用 c 格式时 用循环实现每个元素的输出 2020 4 21 C语言程序设计教程 8 2 用puts函数输出字符串 调用格式 puts str 函数功能 将字符串str输出 str应是所要输出字符串的起始地址 或字符串常量 从该地址所对应的字符开始逐个字符输出 直到遇到第一个 0 为止 同时将 0 转换成换行符 因此 用puts 输出一行 不必另加换行符 n 例 charch student puts ch puts 2020 4 21 C语言程序设计教程 9 2 字符串的输入 1 使用scanf函数输入字符串例 charst 15 scanf s st 将所输入的字符串读到以st为起始地址的 连续的内存单元中 但 scanf s st 是错误的 因为st就代表了该字符数组的首地址 注 输入时 以回车或空格作为结束标志 即 用scanf输入的字符串中不能含有空格 若按如下方法输入 Howdoyoudo 执行语句 scanf s st 则st的内容为 How 0使用格式字符串 s 时会自动加上结束标志 0 第一个空格后的字符没有输入st中 2020 4 21 C语言程序设计教程 10 2 使用函数gets 输入字符 调用格式 gets str 函数功能 从键盘读入一个字符串到以str为起始地址的 连续的内存单元中 并自动在末尾加字符串结束标志符 0 输入字符串时以回车结束输入 这种方式可以读入含空格符的字符串 如 chars 14 gets s 若输入的字符串为 Howdoyoudo 则s的内容为 Howdoyoudo 0 2020 4 21 C语言程序设计教程 11 例10 2字符串输入输出示例 includemain chars 20 s1 20 scanf s s printf s n s scanf s s s s1 printf s s s1 s s s1 puts n gets s puts s 程序运行过程 Howdoyoudo Hows do s1 you do 注 代表空格 2020 4 21 C语言程序设计教程 12 10 1 4字符串处理函数 语言库函数中除了前面用到的库函数gets 与puts 之外 还提供了一些常用的库函数 其函数在string h中字符串拷贝函数 strcpy 调用格式 strcpy d str s str 功能 将以s str为起始地址的字符串或字符串常量 连同 0 复制到以d str为起始地址的 连续的内存中 说明 d str在内存中所占的字节数应不小于s str在内存中所占的字节数 2020 4 21 C语言程序设计教程 13 例 chars1 10 s2 8 student s3 6 strcpy s1 s2 将s2中的 student 赋给s1 连同结束标志 0 s2的值不变 strcpy s3 okey okey 赋给s3 注意 不能直接使用赋值语句来实现拷贝或赋值 如 s1 s2 s1 student 都是不允许的 2020 4 21 C语言程序设计教程 14 2 字符串连接函数strcat 调用格式 strcat d str s str 功能 将s str连同 0 连接到d str的最后一个字符 非 0 字符 后面 结果放在d str中 例 chars1 14 Iama chars2 5 boy strcat s1 s2 连接前 s1 s2 连接后 s1 2020 4 21 C语言程序设计教程 15 3 字符串比较函数strcmp 调用格式 strcmp str1 str2 功能 若str1 str2 则函数返回值为0 若str1 str2 则函数返回值为正整数 若str1 str2 则函数值返回为负整数 比较规则 两个字符串自左至右逐个字符比较 直到出现不同字符或遇到 0 为止 如字符全部相同且字符串的长度相等 则两个字符串相等 若出现不同字符 则遇到的第一对不同字符的ASC 大者为大 返回值为两者ASCII码值之差 比较两字符串是否相等一般用以下形式 if strcmp str1 str2 0 而if str1 str2 是错误的 2020 4 21 C语言程序设计教程 16 4 求字符串长度函数strlen 调用格式 strlen str 功能 求字符串的实际长度即所含字符个数 不包括 0 str为所求字符串的起始地址或字符串常量 例 charstr 10 student intlength strl length strlen str strl strlen verygood 结果 length 7strl 9 2020 4 21 C语言程序设计教程 17 例10 3简单密码检测程序 include stdio h include conio h main charpass str 80 inti 0 while 1 clrscr printf pleaseinputpassword n gets pass str if strcmp pass str password 0 printf passwordiswrong pressanykey elsebreak getch i if i 3 exit 0 2020 4 21 C语言程序设计教程 18 1 字符指针变量的定义字符指针变量的定义与指向普通变量的指针的定义相同 char 指针变量 如 char p 2 字符指针变量的初始化在定义指针变量时使指针指向一个字符串 main char string ILoveChina 初始化string printf s n string 10 2指针与字符串 10 2 1字符串的指针表示法 2020 4 21 C语言程序设计教程 19 char str IloveChina 等价于下列两句 char str str Ilovechina 以上语句的含义 定义str为指针变量 它指向字符型数据 且赋值语句把字符串 Ilovechina 的首地址赋给了指针变量str 考虑能不能这样 charstr1 40 str1 IloveChina 解决方法 charstr1 40 strcpy str1 IloveChina 2020 4 21 C语言程序设计教程 20 3 用字符指针变量来实现对字符串的访问例10 4将一已知字符串第n个字符开始的剩余字符复制到另一字符串中 main inti n chara computer charb 10 p q p a q b scanf d elseexit 0 for p 0 p q q p q 0 printf Stringa s n a printf Stringb s n b 考虑 若输出语句改为如下语句会如何 printf stringais s n p printf stringbis s n q 2020 4 21 C语言程序设计教程 21 虽然用字符数组和字符指针变量都能实现对字符串的访问 但它们之间是有区别的 不应混为一谈 主要有以下几点 4 字符指针变量和字符数组之间的区别 1 字符数组由若干个元素组成 每个元素中放一个字符 而字符指针变量中存放的是字符的地址 不是将字符串放到字符指针变量中 2 赋值方式 对字符数组只能对各个元素赋值 不能用以下办法对字符数组赋值 charstring 9 string Chinese 错误 而对字符指针变量 可以采用下面方法赋值 char s s Chinese 正确 但注意赋给s的不是字符串 而是字符串的首地址 也即 C 的地址 2020 4 21 C语言程序设计教程 22 3 读入一个字符串时可以采用下面的方法 charstr 80 scanf s str 正确 但不可以这样 char a scanf s a 错误 为什么 应该怎样修改 正确方法 char a str 80 a str scanf s a 先使a有确定值 也就是使a指向一个数组的开头 然后输入一个字符串 把它存放在以该地址开始的若干单元中 4 指针变量的值是可以改变的 而数组名虽然代表地址 但它的值是不能改变的 2020 4 21 C语言程序设计教程 23 10 2 2字符串数组字符串数组 是指数组中的每个元素都是一个存放字符串的数组 字符串数组可以用一个二维字符数组来存储 例如 charlanguge 3 10 数组的第一个下标决定字符串的个数 第二个下标是字符串的最大长度 实际最多9个字符 0 占一位置 可以对字符串数组进行初始化 例如 charlanguge 3 10 Basic c pascal 2020 4 21 C语言程序设计教程 24 例10 5 字符串数组的输入 输出与排序 defineN5 defineMaxLen20 include includevoidSortString charname MaxLen intk main charname N MaxLen intk printf npleaseinput dstrings N for k 0 k N k gets name k SortString name N for k 0 k N k puts name k 2020 4 21 C语言程序设计教程 25 voidSortString charname MaxLen intk inti j chartemp MaxLen for j 0 j0 strcpy temp name i strcpy name i name i 1 strcpy name i 1 temp 2020 4 21 C语言程序设计教程 26 例10 6 利用指针数组作为函数参数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青岛旅游元宇宙项目可行性研究报告
- 钢水增氮技术项目可行性研究报告
- 防汛知识培训粮库课件
- 智慧城管数某省市管理系统建设方案
- 人教版(2024)八年级上册Unit 2 Home Sweet Home Section A (1a-pronunciation)课件(内嵌视频)
- 行业标准合作协议
- 金融证券行业发展前景预测
- 人力资源代理合同6篇
- 合同范本之牛羊肉销售合同7篇
- HR数据分析应用-洞察及研究
- 全球低空经济2025年技术规范与实施白皮书
- 贵阳市2026届高三年级摸底考试英语试卷(含答案)
- 2025年城市燃气储气罐采购安装与运营维护服务合同范本
- 病房消毒及卫生管理课件
- 2025年国家公务员考录《行测》真题及参考答案
- 2025年城市管理笔试高频考点
- 艾滋病科普宣传课件
- 水泵房巡检流程培训课件
- 吊装专项施工方案
- 基本药物制度补助资金管理办法
- 无人机培训招生宣讲
评论
0/150
提交评论