




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 数据的组织结构 字符串 第四章 三 字符数组与字符串 2 字符串的组织 字符串是指一个有限长度的字符序列 并且用 0 字符结尾 0 作为字符串的结束标志 字符串常量用一个双引号 括起来例 Cprogram blue C语言中 没有直接提供字符串数据类型 字符串存储在字符数组中 Cprogram 的存储 3 实现字符串的方法 用一维字符型数组定义chararray 10 可以用array 0 array 9 存放9个字符 字符串的初始化可以用数组的初始化方法进行字符串的初始化charstr C p r o g r a m 0 把字符串作为整体进行初始化charstr Cprogram 自动在末尾加 0 4 说明用字符型数组存放字符串时 在有效字符后自动加 0 字符串中所包含字符的个数称为字符串长度例如 blue 的长度为4 但占5个字节 0 占一位 字符串占用数组元素的个数为字符串长数加1 5 例 字符串示例 includemain inti 0 chara K charb Sitdown while a i 0 putchar a i i printf n i 0 while b i 0 putchar b i i 省略了2 常用 0判断是否结束循环 等价于 K 0 6 字符串与字符数组的区别字符数组是变量 用于存放字符型数据 包括字符串 字符串是数据 存放在字符数组中 是一串用 0 结束的字符字符数组的长度可以大于字符串的长度 7 字符串与字符数组区别 字符串放在字符数组中 应包含结束符charstr C p r o m g r a m 0 printf s n n str 下列情况可能输出不可识别字符 乱码 charstr1 C p r o m g r a m printf s n n str1 8 字符串的结束符 0 0 是字符串结束标志 有关字符串处理的所有函数都要求用 0 结束 如果将字符串按字符一个一个地处理就需要人为地添加这个结束符 9 程序段 逐个从键盘接受一个字符串并打印 charstr 20 inti 0 while 1 输入回车后结束 if str i getchar n break str i 1 0 人为地添加字符串的结束符printf s str 用 0 替换了 n 10 程序段 逐个输出字符串的内容 i 0 while str i 0 遇到字符串结束时停止输出 putchar str i i putchar n 11 例 字符串的输入输出示例 includemain chara 10 b 10 gets a scanf s b puts a printf s n b 必须开辟足够大的空间 运行结果 Sitdown Sitdown SitdownSit 遇空格 跳格符或回车符 认为字符串输入结束 s gets puts 在stdio h中 基于一维数组的字符串操作字符串的输入输出 12 字符串的输入 整体输入 标准函数scanf s str 自动添加 0 gets str 把换行符转换为 0 其中str是存放字符串的数组名称 如 charstr 20 注意事项用 s 输入字符串时是用空格符 换行符或制表符作为输入结束 在字符串中不能含有这些符号用 s 格式符时 对应的输入变量str前不能有 gets 函数以换行符作为输入的结束 在输入的字符串中允许包含空格和制表符 13 输出字符串 整体输出 将字符串的内容显示到标准输出设备 屏幕上标准函数printf s str 只有输出 不换行 puts str 输出并换行 其中str是存放字符串的数组名称 定义 charstr 20 str所指的字符串必须用 0 结束puts 输出后 自动换行scanf 输出后 要人为添加换行符 n 14 字符串输出举例 charstr Hello puts str puts str 显示结果 HelloHello charstr Hello printf s s str str 显示结果 HelloHello 15 字符串标准函数在C语言的标准函数库中 提供了数十种与字符串处理有关的标准函数 从而大大地提高了字符串处理的能力 降低了字符串处理的复杂程度 常用字符串标准函数及应用实例 16 字符串转换成数值类型 P98例4 7 atof str 将字符串str转换成一个double值atoi str 将字符串str转换成普通整型 int atol str 将字符串str转换成长整型 long 原型在stdlib h中 其中str是数字字符串 数值类型转换成字符串 P99例4 8 itoa num str radix num是一个int类型的数值ltoa num str radix num是一个long类型的数值其中str用于存放结果的字符串 radix是用户指定的进制数 它的取值必须介于2 36之间 17 大小写转换strlwr str 所有大写字母转换成小写字母strupr str 所有小写字母转换成大写字母函数原型都在string h中 实例 统计一段文本中每个英文字母出现的次数 小写都被认为是大写 教材P101例4 9 18 include include include defineNUM26main intletter NUM 0 用于存放统计结果的一维数组 charstr 80 存放以字符串形式输入的文本 inti printf nEnteratextline gets str 输入文本 strupr str 将文本中的所有小写字母转换成大写字母 for i 0 str i 0 i 统计每个字母出现的次数 isalpha判ch中是否为字母 是则返回非0 否则返回0 if isalpha str i letter str i A letter str i A 1 for i 0 i NUM i 输出统计结果 printf n c d A i letter i 程序代码 与教材P84 85例4 2比较 19 计算字符串长度strlen str 返回字符串中所包含的字符个数 即字符串长度 0 不计算在内 字符串比较strcmp str1 str2 比较字符串str1与str2的大小若str1 str2函数返回值 0若str1 str2函数返回值 0若str1 ABC ABCD ABCD 字符串处理函数 20 实例假设用户的密码是 administrators 下面这个程序将用于检测用户输入的密码是否正确 如果不正确 给出相应的提示信息 并请求用户重新输入 教材P102例4 10 21 include includemain charpassword 20 存放用户输入的密码 printf nEnterpassword gets password 输入密码 检测用户输入的密码 如果不正确 给出提示 并请求重新输入 while strcmp password administrators 0 printf nInvalidpassword n n printf Enterpassword again gets password printf OK 输入正确 显示 OK 程序代码 问题 要限制密码输入的次数 3次 应如何修改 22 字符串拷贝strcpy str1 str2 将字符串str2拷贝到字符串str1中str1是用于存放拷贝结果的存储区域 例D 1 从键盘输入若干单词 找出最长的单词 问题分析与找最大值类似因不知输入的单词数量 不能确定循环次数 以空字符串作为结束标志用字符串的长度进行比较 但要保存当前最长字符串和其长度 23 include includemain charstr 80 maxstr 80 intmax 0 len do printf Enterastring gets str len strlen str if len max strcpy maxstr str max len while len 0 printf Themaxstringis s n maxstr 24 字符串连接strcat str1 str2 将str2连接在str1之后 并在结束处添加一个字符串结束符 0 实例 根据用户的选择输出相应的字符串 教材P104例4 11 说明显示一个菜单 用户选择一项 则可以输出与该项相关的信息 25 include includemain charstr1 80 Thisisa charstr2 program charstr3 Java charstr4 Pascal charstr5 C charstr6 C intchoice printf n MENU n 菜单 printf nJava 1 printf nPascal 2 printf nC 3 printf nC 4 printf nchoice scanf d 用户做出选择 程序代码 只给出部分初值 26 switch choice 根据用户的选择拼接字符串 case1 strcat str1 str3 strcat str1 str2 break case2 strcat str1 str4 strcat str1 str2 break case3 strcat str1 str5 strcat str1 str2 break case4 strcat str1 str6 strcat str1 str2 break default strcpy str1 Error 被覆盖 可用strcat break printf n s str1 显示字符串 27 文本变换 例4 12 文本加密 解密 有规律地改变文本中字符的ASCII码 达到加密的目的阅读时 以相反的规律改变文本中字符的ASCII码 达到解密的目的 28 include include includemain inti chartext 1000 gets text 输入文本内容 for i 0 text i 0 i if isalnum text i text i text i 5 变换 puts text for i 0 text i 0 i if isalnum text i text i text i 5 还原 puts text 程序代码 判断参数为字母或数字 返回真 原型在ctype h中 29 求子串函数strstr str1 str2 str1是主串 str2是子串若在str1中存在子串str2 则返回子串str2在主串中第一次出现 第一个字符 的位置 指针 否则返回空在字串中找字符出现位置的函数strchr str1 ch str1是一个给定的字符串 ch是所要查找的字符若在str1中存在字符ch 则返回ch在字符串str1中第一次出现的位置 指针 否则返回空 30 四 二维数组 二维数组由M行N列具有相同性质的数据组成 有两个下标值唯一确定一个元素 定义格式 数组名 行长度 列长度 doublearr 10 20 存储时按行排列下标范围arr 0 0 arr 9 19 表示数据共200个元素数组元素访问arr 0 0 arr 1 2 9 2 用下标访问数组元素的引用形式 数组名 下标 下标 31 二维数组的存储 例如 inta 3 4 数据表示共12个元素 所占存储空间大小 即字节数 sizeof 元素类型 元素数量 即行数 列数 内存状态 先行后列 32 二维数组的初始化 分行给二维数组赋初值inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 按数组排列顺序对各元素赋初值inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 在对全部数组元素赋初值时 可以不指定数组行长度inta 4 1 2 3 4 5 6 7 8 9 10 11 12 对部分元素赋初值inta 3 4 1 5 9 inta 3 4 1 5 9 33 二维数组的引用 赋值inta 2 3 a 0 0 1a 0 1 1a 0 2 1a 1 0 1a 1 1 1a 1 2 1 for i 0 i 2 i for j 0 j 3 j a i j 1 输入for i 0 i 2 i for j 0 j 3 j scanf d 输出for i 0 i 2 i for j 0 j 3 j printf d a i j printf n 34 例转置矩阵的计算 includemain intx 3 2 1 2 3 4 5 6 inty 2 3 inti j for i 0 i 3 i for j 0 j 2 j y j i x i j 输出2行3列的矩阵 35 例 判定给定方阵是否为对称矩阵 每个元素都应满足array i j array j i 判断对称性 只需用下三角的每个元素与对应的上三角元素进行比较 教材P109例4 13 36 include defineNUM5 矩阵行列数 main intm NUM NUM 定义二维数组变量 inti j 输入矩阵 printf Enter drows dcolsdatasforthemaxtrix n NUM NUM for i 0 i NUM i for j 0 j NUM j scanf d 37 判断矩阵是否对称并输出相应的结果 for i 0 i NUM i for j 0 j i j if m i j m j i printf nThematrixisn tsymmetrical return0 printf nThematrixissymmetrical 38 第4章第二部分作业 阅读教科书第四章 字符数组与字符串 二维数组 一 阅读P1193二 编程题P1207 8P1209 10 选作 三 上机P1207P1212 39 P120第7题提示 设单词之间用空格 可以有多个 或回车符 可以有多个 隔开跳过前导空格 也可不考虑 循环开始 结束条件 遇到 0 若字符是非空格或回车 则累加字符个数 单词长度 否则 表示前面是一个单词 记录当前最长单词的长度找到后面第一个非空格 回车的字符 则可能是下一个单词的开始 40 附录 字符串处理函数和实现相应功能的部分自编程序 补充自学 求字符串长度strlen 字符串复制strcpy 字符串连接strcat 字符串比较strcmp 41 include includemain chara 80 intcount gets a count strlen a printf s d n a count 运行结果 IamOK IamOK 7 问 strlen Good 的值 例1 1 求字符串长度函数的使用 42 例1 2 求串长自编程序 includemain chara 80 inti 0 count 0 gets a while a i 0 count i printf s d n a count 43 include includemain chara 50 b 80 gets a strcpy b a puts b 运行结果 IamOK IamOK 给a输入 输出b中串 例2 1 字符串复制函数的使用 44 chara 5 ABCD b 5 abcd chartemp 5 strcpy temp a strcpy a b strcpy b temp 交换两个数组中字符串 45 例2 2 字符串复制的自编程序 a b while a i 0 b i a i i b i 0 46 includemai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兖州煤业安全培训中心课件
- 创新安全培训模式总结课件
- 创意安全生产培训心得课件
- 先秦散文原创力
- 创客教室配套课件设计
- 《金色的草地》 说课稿
- 委书记的榜样-焦裕禄公开课一等奖创新教案(表格式)统编版高中语文选择性必修上册
- 内河船员安全基本培训课件
- 教师培训交流汇报
- 科学活动比较粗细研究
- 零售药店医保培训试题及答案,零售药店医保培
- 江苏历年语文高考真题答案
- DB51T 2975-2022气凝胶复合保温隔热材料及系统通用技术条件
- 外科学-第十一章-外科感染(含案例分析)课件
- 《ch棘皮动物》课件
- 急诊科岗位职责
- 中国服用过兴奋剂运动员名单 兴奋剂真的是毒品吗
- 小学英语语法时态讲解与归纳
- 《生存与修炼》熊厚音讲《道德经》教学文案
- 淘宝新店运营计划书文献
- 产教融合校企合作[可修改版ppt]课件
评论
0/150
提交评论