




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符串 第8章 目录 字符串的概念字符数组与指针字符串处理函数字符与字符串的应用 8 1字符串的概念 字符与字符串在计算机中 任何数据都是以二进制位形式存储和处理的 字符数据用对应的字符编码表示在Windows平台上 常见的编码方案有ASCII GB 2312 GBK BIG5 Unicode等在ASCII编码中 每个字符用1个字节 8个二进制位 表示 因此共有28 256个符号 它们的编码依次为0 255 用十六进制表示为0 x00 0 xFF可将ASCII字符分为两类 可打印字符和不可打印字符 在C语言程序中 可打印字符可以直接书写 而不可打印字符可以用对应的转义字符表示 例如用 n 表示回车符计算机所处理的字符数据有时是分散的单一字符 如 a 0 n x20 等 但更多的时候是若干字符的组合 如 Beijing OneWorldOneDream 等通常把若干字符的组合看作一个整体 称为字符串 字符串的存储方法C语言中 程序中的字符串使用双引号 作定界符 字符串以字符 0 为结束标识 字符 0 并不显式地出现在字符串中字符串在内存中占据相邻的存储单元 字符串的首地址是该字符串的第一个字符的地址 其他字符按顺序依次存放在第一个字符的后边 最后是字符串的结束标识 0 8 2字符数组与指针 字符数组字符数组是数据类型为字符的数组 其定义格式为 char数组名 数组长度 字符数组中存放的字符可以组成字符串 此时至少有一个元素为 0 从左边算起的第一个 0 是该字符串的结束符字符数组中没有 0 元素 就不能按字符串处理字符数组的初始化方法 chara C L a n g u a g e 0 charb 67 32 76 97 110 103 117 97 103 101 0 charc CLanguage chard CLanguage 若某字符数组中存放了一个字符串 程序中通常只会关心字符串的长度 而较少考虑数组长度 求字符串的长度 1 字符串的长度是字符串中位于结束标识 0 对应整数0 之前的所有字符的个数 也就是从数组的第一个元素开始到第一个0元素为止所有非0元素的个数 includevoidmain charstr BeijingOlympicgames inti iLength 0 while str iLength 0 iLength printf Lengthofstring n for i 0 i iLength i printf c str i printf nis d n iLength 字符串的输入和输出C语言专门为字符串的输入输出定义了一系列库函数 常见的有scanf和printf gets和puts等scanf函数使用scanf函数输入字符串的一般格式为 scanf s 字符数组 其中 s为字符串描述符 与之对应的输入项是字符数组的首地址charx 10 scanf s x 不同于输入其它类型的数据 作为输入参数的数组名x的前面不能再有取地址运算符 思考 输入的字符数多于数组长度 会有什么结果 printf函数printf函数的用法与scanf函数类似 输出参数可以是字符串常量 一般格式为 printf s 字符数组名或字符串常量 charx 10 Hi all n printf s x printf s Hello n 若从键盘输入的字符只有字母和空格 最后输入的是一个空格和字符 试统计一共输入了几个单词 不包含字符 求字符串的长度 2 使用scanf函数读取每一个单词 每读取一个单词 计数一次 最后读入的单词为 include defineN20voidmain inti word N printf 输入一句话 以 结束 n i 0 scanf s word while word 0 i scanf s word printf 共输入了 d个单词 n i gets函数和puts函数使用gets函数可输入一句话 包含空格 制表符 其语法为 gets 字符数组 存入字符数组的是一个字符串 以 0 结束 但不包括回车符chars 100 gets s 若输入是 为空格 I m a sport 则s的内容为 I m a sport 使用puts函数输出字符串 会在结束时自动换行 其语法为 puts 字符数组或字符串常量 输入一句话 统计字母的个数 3 方法是 将输入的句子存放在一个字符数组中 然后从第1个字符开始做逐一判断 以确定该字符是不是字母 直至句子结束 include defineN256voidmain charstr N inti iCount 0 puts 输入一句话 gets str for i 0 str i 0 i if A str i sprintf函数的使用 4 sprintf函数可将要输出到终端的内容先以字符串方式存放在字符数组中 以便作进一步处理 其一般格式是 sprintf 字符数组名 格式控制字符串 输出表列 includevoidmain intx 5 floaty 3 4567 charstrBuffer 256 sprintf strBuffer x 3d ty 5 2f x y puts strBuffer 字符指针字符指针是指向字符串的指针 定义为 char 指针 可以用字符数组为指针赋值chara WelcometoBeijing char p a 也可以用字符串常量的地址为指针赋值char p Hello 由于p为指针变量 指针指向是可以改变的char p Hello q p p world 如果x为字符数组 则令x abc 是错误的 字符数组和字符指针的比较 截取并输出任意字符串的前n个字符 5 若字符数组中存放了一个字符串 要截取前n个字符 只需将字符数组的第n 1个字符置为 0 即可 includevoidmain charcData 256 char p cData intn puts 请输入一串字符 gets p puts 要截取前几个字符 scanf d 思考 如果输入的字符串的长度比n小 结果怎样 输入一个字符串 然后把其中的大写字母转化为小写字母 输出转化后的字符串 6 includevoidmain charcData 256 char p q cData inti 0 printf 输入一串字符 gets q for p q p 0 p if p A 字符串数组字符串数组程序要处理的字符串通常不止一个 例如 某班同学的姓名 某本书的词汇表 某文档中的语句行等等字符串数组是存放了若干字符串的字符数组 是一个二维数组 每个字符串占一行 字符串的个数对应数组的行数字符串数组的定义为 char数组名 字符串个数 字符串长度 要引用字符串数组中的字符串 可使用行地址第i个字符串的地址为 数组名 i 数组名 i 某班有10名同学参加考试 求成绩最高的学生的姓名 7 include defineN3voidmain charsName N 10 inti t iScore N printf 顺序输入每个姓名和成绩 用空格分开 n for i 0 iiScore t t i printf s的成绩最好 为 d n sName t iScore t 程序要处理的数据包括学生姓名 考试成绩 核心是确定10个人谁的成绩最高 也就是求最大值 指向字符串数组的指针定义指向字符串数组的指针的方法是 char 指针 字符串长度 其中 字符串长度 必须与字符串数组相同 指向字符串数组的指针 8 includevoidmain charsFruit 5 10 Apple Pear Banana Peach Plum char p 10 p PearPeach 字符指针的数组如果数组元素是字符指针 每个指针指向一个字符串 则该数组为字符指针的数组 定义为 char 指针 数组长度 字符指针的数组 9 includevoidmain char a Beijing b Shanghai char pArray a b inti for i 0 i 2 i puts pArray i 8 3字符串处理函数 C语言函数库提供了大量的字符串处理函数 极大地丰富了处理字符串的手段要使用字符串处理函数 程序中需要包含 include 复制与连接strcpy和strncpy函数两个函数的一般形式是 strcpy 字符数组1 字符串2 strncpy 字符数组1 字符串2 整数n strcpy函数的功能是将 字符串2 对应的字符串全部复制到 字符数组1 中 结果两个字符串相同 而strncpy函数最多复制前n个字符 字符数组1 的长度必须足够容纳复制后的字符串 字符串2 可以是存放了字符串的字符数组 也可以是字符串常量 或者指向字符串的指针 chara 10 b China strcpy a b 交换两个字符串 10 方法1 采用字符数组存放字符串 include include defineN40voidmain charstr1 N apple charstr2 N watermelon charstr3 N printf s s str1 str2 strcpy str3 str1 strcpy str1 str2 strcpy str2 str3 printf s s str1 str2 方法2 采用字符指针指向字符串 include includevoidmain char str1 apple char str2 watermelon char str3 printf s s str1 str2 str3 str1 str1 str2 str2 str3 printf s s str1 str2 交换字符数组中的字符串 交换字符指针指向的字符串 方法3 用指针操作数组 include include defineN20voidmain charstr1 N str2 N char ps1 str1 ps2 str2 char ps3 printf 输入两个字符串 用空格分开 scanf s s ps1 ps2 ps3 ps1 ps1 ps2 ps2 ps3 printf 交换后为 s s ps1 ps2 strcat和strncat函数两个函数的一般形式为 strcat 字符数组1 字符串2 strncat 字符数组1 字符串2 整数n strcat函数将 字符串2 附加在 字符数组1 中的字符串的后边 也就是把两个字符串连接起来再存入 字符数组1 而strncat函数仅把 字符串2 的前n个字符连接到 字符数组1 的字符串后边chara 80 I ma b student c sportfromChina strcat a b 后a的内容为 I mastudent strncat a c 5 后a的内容为 I masport 字符数组1 中的字符串结束符在连接 字符串2 后将被丢弃 比较大小字符串的大小由字符串中的字符的编码决定对于任意两个字符串 从它们的第一个字符开始比较 若相同 则继续比较下一个字符 直到出现不同的字符或者遇到了结束符 若存在不同的字符 则编码较大的字符所在的字符串较大 如果同时遇到结束符 则两个字符串相等 ABC 小于 AbC ABC 大于 AB 123 等于 x31 x32 x33 关系运算符不能用来比较字符串的大小 只能使用库函数 strcmp strncmp和stricmp函数函数的一般形式 strcmp 字符串1 字符串2 strncmp 字符串1 字符串2 整数n stricmp 字符串1 字符串2 函数的函数值都是整型的 如果函数值为0 表示两个字符串相等 如果函数值大于0 则 字符串1 大于 字符串2 如果函数值小于0 则 字符串1 小于 字符串2 strcmp函数是最常用的函数之一 从左到右逐一比较每个字符 直到遇到不同的字符或遇到字符串结束为止strncmp函数只比较两个字符串的前n个字符用stricmp函数比较两个字符串时 将忽略字母符号的大小写 求若干字符串中的最大字符串 11 实际上 这也是一个求最大值问题 include include defineN10voidmain charstrWord N 20 inti iMax printf 顺序输入 d个字符串 用空格分开 n N for i 0 i0 iMax i printf 第 d个字符串最大 为 s iMax 1 strWord iMax strstr函数strstr函数的一般形式为 strstr 字符串1 字符串2 strstr函数的功能是在 字符串1 中查找 字符串2 如果找不到 则函数返回空指针NULL 若找到了 则返回与 字符串1 中所包含的 字符串2 的首字符对应的指针如果 字符串1 中包含 字符串2 那么 字符串2 常被称作 字符串1 的子串 判断一个字符串中是否包含一个子串 12 include includevoidmain char pSrc oneworld onedream char ps1 World ps2 one char p printf 字符串 s n pSrc if p strstr pSrc ps1 NULL printf 未找到子串 s n ps1 elseprintf 子串 s在第 d位 n ps1 p pSrc 1 if p strstr pSrc ps2 NULL printf 未找到子串 s n ps2 elseprintf 子串 s在第 d位 n ps2 p pSrc 1 变换strlwr和strupr函数两个函数的一般用法是 strlwr 字符数组 strupr 字符数组 strlwr函数将存放在 字符数组 中的字符串的所有大写字母转化为小写字母 而strupr函数则相反转换后得到的字符串仍存放在 字符数组 中atoi和atof函数这两个函数的原型在stdlib h中 一般用法是 变量 atoi 字符串 变量 atof 字符串 atoi函数将 字符串 转化成整数 并作为函数值返回 而atof函数则转化为实数 任意输入一个加法算式 格式为 整数1 整数2 例如 23 32 计算并打印出结果 注 算式中 开始位置 和 的前后都可以有空格 13 输入时 如果 的后面必有空格 用scanf d d a b 即可获得正确的输入 如果 的后面没有空格 那么用scanf d 1s d a s b s为字符数组名 也可获得正确的输入 但这些方法都不能处理非法的输入 本例的方法是 将输入的 算式 存放在字符数组中 用atoi函数提取字符串中的第1个加数 若提取失败则显示出错并中断程序运行 截取剩余的字符组成新的字符串 判断新的字符串的第一个非空格字符是否为 如果不是 则显示出错并中断程序运行 截取 后的字符串 用atoi函数提取第2个加数 若失败则显示出错并中断程序运行 截取剩余的字符串 若剩余字符串中的只有一个非空格字符 则完成计算 否则显示出错 include includevoidmain inta b c chars 20 p s printf 输入算式 形如 a b gets p if a atoi p 0 printf 错误 不能提取整数 n exit 0 while p p 0 p if b atoi p 0 printf 错误 不能提取整数 n exit 0 while p p 0 其他函数用strlen函数可计算字符串的长度 用法是 变量 strlen 字符串 strlen函数的函数值是一个整数 表示 字符串 的长度 即结束符 0 前的字符的个数与sizeof 字符串 不同 用strlen函数求得的并不是所占内存的字节数 8 4字符与字符串的应用 输入两个字符串 然后把它们连接起来形成一个字符串 再输出到屏幕上 14 方法1 使用strcat函数 include includevoidmain chars1 256 s2 256 puts 输入2个字符串 gets s1 gets s2 strcat s1 s2 printf 连接后为 s n s1 方法2 使用数组 includevoidmain chars1 256 s2 256 inti 0 j 0 puts 输入2个字符串 gets s1 gets s2 while s1 i 0 i while s2 j 0 s1 i s2 j i j s1 i 0 printf 连接后为 s n s1 方法2 使用指针 includevoidmain chars1 256 s2 256 char p1 s1 p2 s2 puts 输入2个字符串 gets s1 gets s2 while p1 0 p1 while p2 0 p1 p2 p1 p2 p1 0 printf 连接后为 s n s1 includevoidmain chars1 256 s2 256 char p1 s1 p2 s2 puts 输入2个字符串 gets s1 gets s2 while p1 0 p1 while p1 p2 p1 0 printf 连接后为 s n s1 将字符串倒置后再打印出来 15 不同于数值数组的倒置 对于存放了字符串的字符数组 倒置仅仅是对结束符前的字符进行的 方法1 使用数组 includevoidmain charstrTemp 256 ch inti j printf 输入一串字符 gets strTemp i j 0 while strTemp j 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【教案版】小学四班级下册 跳跃2
- 中国舞蹈音乐教学课件
- 2025年船舶驾驶员适任考试模拟题与答案解析
- 2025年行政主管招聘面试预测题及实战演练指南
- 2025年制造业招聘面试模拟题及答案详解手册
- 2025年护士执业资格考试实操技能部分要点梳理及模拟题
- 初中数学教学设计及课件
- 2025年钎焊工艺考试重点及应试技巧
- 会演戏的玩具教学课件
- 申通快递安全知识培训课件
- 助产专业介绍
- 2025年职业卫生培训试题及答案
- 工程项目招投标流程及风险防控措施
- 《电机与拖动基础》课件(共十一章)
- 民宿合伙协议书范本
- 医学检验质量培训
- 2025年洛阳理工学院招聘硕士研究生学历专任教师考试笔试试题(含答案)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
- 愚公移山英文 -中国故事英文版课件
- NBT-4701焊接工艺评定中英文格式-填写范本-20
- 远洋航线设计、航法及气象导航
评论
0/150
提交评论