C语言程序设计重庆大学课件第07章字符串及其应用.ppt

上传人:max****ui 文档编号:6826947 上传时间:2020-03-05 格式:PPT 页数:57 大小:2.11MB
返回 下载 相关 举报
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第1页
第1页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第2页
第2页 / 共57页
C语言程序设计重庆大学课件第07章字符串及其应用.ppt_第3页
第3页 / 共57页
点击查看更多>>
资源描述
程序设计技术 C语言数据描述和C程序设计初步结构化程序设计基础和C语言的控制结构数组及其应用函数与C程序结构指针与函数指针与数组字符串及其应用结构体类型和联合体类型C语言的文件处理及其应用位运算与枚举类型 字符串及其应用 C语言的字符串表示方法字符串的常用处理方法及标准库函数 7 1 1字符串表示方法 字符数组C语言只有字符串常量 没有字符串变量 对字符串的处理是使用字符数组实现 用于存放每一个字符数据的数组称为字符数组 字符数组的定义 char数组名 长度 注意 存放字符串时要使用空字符 0 作为字符串的结束符号 所以定义字符数组时 应使字符数组长度大于或等于字符串长度加1 例如 charstr 7 abcd 数组名str是地址常量 7 1 1字符串表示方法 指向字符变量的指针 串指针 定义字符指针变量 并将字符串或字符串常量的首地址赋给该指针变量 即字符指针变量指向一个字符串 例如 char sPtr abcd sPtr 1234 首先在系统内存中分配一段连续的存储区域并存放指定的字符串常量 然后将该存储区域的起始地址 字符串常量的首地址 赋值给字符指针变量sPtr 赋值语句sPtr 1234 使指针变量sPtr由指向字符串 abcd 改为指向字符串 1234 7 1 1字符串表示方法 字符数组的初始化使用单个字符常量chars2 9 H e a d chars3 N e w Y e a r 使用字符串常量系统自动在字符串的结尾加上结束符号 0 但仍需注意数组长度的问题 C语言还允许初始化一维字符数组时不使用花括号括住字符串常量 chars1 80 NewYear chars2 80 NewYear chars3 NewYear 此时字符数组的长度为9 7 1 1字符串表示方法 7 1 2字符串的输入输出 使用scanf printf函数使用格式控制符 c可以通过单个字符方式输入输出字符数组 chara 7 b 8 c 5 for i 0 i 6 i scanf c 整体输出一个字符串 使用gets puts函数 函数参数为字符数组名或串指针 使用gets和puts函数一次可以输入输出一个字符串 7 1 2字符串的输入输出 Scanf和gets函数的区别一次调用能够输入的字符串个数不同gets str 输入1个字符串 scanf s s s a b c 输入多个字符串 空格分隔 空格字符的处理不同gets输入字符串中可含有空格字符 scanf输入字符串中不能含空格字符 printf和puts函数的区别一次调用能够输出的字符串个数不同puts str1 输出1个字符串 printf s n s str1 str2 输出多个字符串 输出数据换行处理方式不同puts函数输出字符串后会自动换行 printf函数输出字符串后不自动换行 例7 2将字符串中小写字母转变成大写字母 includevoidmain charstring 100 p printf Pleaseinputastring gets string p string while p 0 if p a 7 1 2字符串的输入输出 例7 1程序演示 p P p A B p 字符串及其应用 C语言的字符串表示方法字符串的常用处理方法及标准库函数 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 1字符串中有效字符的统计 测试字符串的长度统计字符串中包含的有效字符个数 即从字符串的第一个字符开始 依次向后判断该字符是否字符串结束符 0 若不是则予以统计 直到遇到 0 为止 标准测试字符串长度函数strlen函数原型 在中size tstrlen constchar string 其中 size t表示整型数据类型函数调用 strlen str 功能 测试str的字符串长度 返回值为字符串的实际长度 不包括结束字符 0 7 2 1字符串中有效字符的统计 数组方式统计字符串长度intstrlength chars inti for i 0 s i 0 i returni 指针方式统计字符串长度intstrlength char s inti 0 while s i s returni 例7 3编制求字符串长度函数并用主函数进行测试 s 0 移动指针 7 2 1字符串中有效字符的统计 例7 5编程序实现功能 判断输入字符串是否回文 回文 左读或右读都相同 如 level是回文 for head end head end if head end flag 0 break if flag printf s是回文 word elseprintf s不是回文 word head end head end abcde 0 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 2字符串的复制 标准字符串复制函数strcpy函数原型 在中char strcpy char strDestination const strSource 函数调用 strcpy str1 str2 功能 将字符串str2拷贝到字符串str1中 函数返回字符串str1 其中 字符数组str1必须定义足够大 str2可以是字符串常量 例7 7使用标准函数strcpy实现字符串的拷贝 例7 6编制字符串复制函数并用相应主函数测试 字符数组方式实现字符串拷贝voidstrcopy chars chart inti for i 0 t i 0 i s i t i s i 0 7 2 2字符串的复制 指针方式实现字符串拷贝char strcopy char s char t char p s while s t 0 returnp 7 2 2字符串的复制 保存s的首地址到p t的 0 先赋给 s再判断是否等于 0 p t a b t s cde 0 s t s 使用标准字符串复制函数的注意点字符串复制函数使用的字符数组形参本质上是一个指针量 对应的实参必须是地址量 可以将实参字符数组 字符串 的部分提供给形参数组共享 字符串存储时 系统会自动添加字符串结束符 0 程序处理字符串时 只需指出开始位置 7 2 2字符串的复制 例7 8编程将源字符串从指定位置拷贝到目标字符串 include includevoidmain chars1 80 s2 80 intpos printf Inputthestrings1 gets s1 printf Inputthepos scanf d 7 2 2字符串的复制 2 2 S1 2 s1 2 cde 0 7 2 2字符串的复制 voidmain chars 100 intstart len length gets s scanf d 例7 9程序演示 3 3 3 6 S 6 S 3 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 3字符串的连接 字符串连接的基本思想首先找到目标字符串的结尾处 然后从源字符串的第一个字符开始依次取出每一个有效字符赋值到指定目标位置 直到源字符串的字符处理完为止 标准字符串连接函数strcat函数原型 char strcat char strDestination char strSource 函数调用 strcat str1 str2 功能 将字符串str2连接到字符串str1的后面生成新的字符串str1 函数返回字符串str1 字符数组长度应足够大 大于strlen str1 strlen str2 7 2 3字符串的连接 例7 10编制字符串连接函数并用主函数测试 指针方式实现字符串连接char strjoin char s char t char p1 s while s s while s t 0 returnp1 保存s的首地址到p1 s2 t s p1 s t s 例7 12编程将源字符串从指定位置连接到目标字符串 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 4字符串中字符的查找 基本思想 字符串中字符的查找就是按照指定方向寻找指定字符第一次在字符串中出现的位置 从查找方向分为正向查找 从串首至串尾 反向查找 从串尾至串首 从获取被查找字符位置信息分为返回下标序号方式返回存放地址方式 标准字符查找函数strchr函数原型 char strchr constchar string intc 函数调用 strchr str ch 函数功能 正向在字符串str中查找字符ch 若ch存在则返回其在字符串中首次出现的地址 否则返回NULL 7 2 4字符串中字符的查找 7 2 4字符串中字符的查找 函数 返回被查找字符在串中的下标序号intsearch chr chars charc inti for i 0 s i 0 i if s i c returni return 1 例7 13编制函数实现功能 在字符串中正向查找指定字符 并用主函数测试 函数 返回被查找字符在串中的存放地址char search chr chars charc inti 0 for s i 0 i if s i c return 7 2 4字符串中字符的查找 for i 0 j 0 s1 i 0 i pos search chr s2 s1 i if pos NULL 例7 14编程序实现功能 利用上面设计的字符查找函数求两个字符串中共同具有的字符并将这些字符组成第三个字符串 注意相同字符只能取一次 在第3个串中只保存一个相同字符的条件 7 2 4字符串中字符的查找 函数 在字符串中反向查找指定字符intRsearch chr chars charc inti for i strlen s 1 i 0 i if s i c returni return 1 例7 16编制函数实现功能 在字符串中反向查找指定的字符 并用主函数测试 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 5字符串中字符的插入和删除 在字符串指定位置插入字符首先在字符串中查找指定字符位置 然后将指定位置后的所有字符依次向后移动一个字符位置以空出插入字符所需的空间 最后将该字符插入到指定位置 字符的插入方式前插 插入字符在指定位置原字符之前后插 插入字符在指定位置原字符之后例7 17编制函数实现功能 在字符串指定字符之前插入另一个字符 若在字符串中找不到插入位置 则将被插入字符添加到字符串末尾 并用主函数测试 7 2 5字符串中字符的插入和删除 voidinsertchr chars charpos charc intlast strlen s char p p strchr s pos if p NULL for s i p 6 s 6 i 在字符串中删除指定的字符基本思想 首先在字符串中查找指定字符的位置 若找到则将字符串中自该位置以后所有字符依次向前移动一个字符位置即可 例7 18请编制函数 并用相应主函数测试函数原型 voiddeletechr chars charc 其功能是在字符串中删除指定字符 若指定字符不存在则显示相应提示信息 7 2 5字符串中字符的插入和删除 使用标准函数在串中删去某个字符的方法 将被删除字符后的字符串拷贝到该字符位置 voiddeletechr chars charc char p p strchr s c if p NULL strcpy p p 1 elseprintf c 不在 s 中 n c s 7 2 5字符串中字符的插入和删除 C P P 1 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 6字符串的比较和子串的查找 标准字符串比较函数strcmp函数原型intstrcmp constchar string1 constchar string2 函数调用 strcmp s1 s2 函数功能 按ASCII码值的大小对两个字符串从左到右逐个字符依次比较 直到出现不同字符或遇到字符结束符 0 为止 比较结果的判断规则如下 例7 19编制字符串比较函数strcompare 并用主函数测试 7 2 6字符串的比较和子串的查找 字符数组方式实现两个字符串比较intstrcompare chars chart inti for i 0 s i t i i if s i 0 return0 returns i t i 6 7 2 6字符串的比较和子串的查找 指针方式实现两个字符串比较intstrcompare char s char t while s t if s 0 return0 s t return s t 注意 字符串本质上是字符数组 不能整体进行操作 故if s1 s2 是非法的 但可以使用标准的strcmp函数进行整体比较 例7 20使用标准strcmp函数比较两个字符串 比较字符串前n个字符的标准函数strncmp函数原型 intstrncmp char string1 char string2 size tcount 函数调用 strncmp str1 str2 n 函数功能 比较str1和str2两个字符串的前n个字符是否相等 如果相等则返回0 否则返回非0 7 2 6字符串的比较和子串的查找 例7 22使用标准strncmp函数比较两个字符串前n个字符 例7 21编制函数strncompare 并用主函数测试 intstrncompare chars chart intn inti for i 0 s i t i i if s i 0 n 0 return0 returns i t i 两个字符串同时结束 或者比较了指定的n个字符时都相等 返回数值0 7 2 6字符串的比较和子串的查找 2 1 0 字符串中子串的查找子串 指字符串从某一位置开始连续的若干个字符构成的一字符序列 子串 abc cde等主串 包含子串的字符串 如主串 abcdefg基本思想一 首先在主串中查找子串的首字符 如果找到则比较主串中其后连续的若干字符是否与子串相同 如果相同则返回子串首字符在主串中出现的位置 序号或地址 否则继续查找 直到主串中查找不到子串的首字符为止 当被查找子串在主串中不存在 则函数返回 1或者NULL 7 2 6字符串的比较和子串的查找 例7 23b编制字符串中查找子串函数并用主函数测试 7 2 6字符串的比较和子串的查找 intfindsubstr chars chart intsearch chr chars charc inti 0 len strlen t while i search chr 求子串长度 从首字符开始比较主串中有无子串 有则返回子串首字符在主串中的序号 否则继续查找 在主串中查找子串首字符 返回下标序号 主串中无子串返 1 3 i 2 len 3 字符串中子串的查找基本思想二 即从主串中的第一个字符开始 以后依次向后移动一个字符的位置 取出主串中与子串长度相等的前几个字符与子串比较 若相等则返回子串在主串中的起始位置 否则继续 直到主串查找完毕为止 若主串中不存在子串 返回 1 intfindsubstr chars chart inti 0 len strlen t while strncmp 7 2 6字符串的比较和子串的查找 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 7字符串中子串的插入和删除 字符串中子串的插入基本思想 首先在字符串中找到插入位置 移动插入点之后的所有字符以腾出欲插入的子串长度的位置 进行插入操作 例7 25编制子串插入函数 用主函数测试 函数原型为 voidinsertsubstr chars chart 7 2 7字符串中子串的插入和删除 voidinsertsubstr chars chart intsearch chr chars charc inti j len strlen t for i 0 s i 0 i j search chr s t 0 if j 1 for i j i s i len s i i for j 0 t j 0 j i s i t j elseprintf 字符 c 不在字符串 s 中 n t 0 s 4 j 2 i 7 i 2 尾 插入点 7 2 7字符串中子串的插入和删除 voidinsertsubstr char s char t char p1 p1 strchr s t if p1 NULL strcat t p1 strcpy p1 t elseprintf 字符 c 不在字符串 s 中 t 0 s 例7 26改写例7 25程序 充分利用标准函数编程实现子串插入函数insertsubstr p1 7 2 7字符串中子串的插入和删除 字符串中子串的删除基本思想 首先在主串中找到欲删除子串的首字符位置 然后向前移动被删除子串之后的所有字符 例7 27函数原型为 voiddelsubstr chars chart 其功能是在一个主串中查找子串 找到则将子串从主串中删除 若子串不存在则给出提示信息 7 2 7字符串中子串的插入和删除 voiddelsubstr chars chart intfindsubstr chars chart intpos len pos findsubstr s t if pos 1 len strlen t for s pos s pos len 0 pos elseprintf 串 s 不在串 s 中 n t s 取子串t的长度 将s串中被删子串后的所有字符向前移动t串的长度距离 3 2 POS POS 3 2 3 Len 主串中查找子串 7 2 7字符串中子串的插入和删除 例7 28重写例7 27程序 充分利用标准函数编程实现子串删除函数 voiddelsubstr chars chart intfindsubstr chars chart intpos pos findsubstr s t if pos 1 strcpy 字符串的常用处理方法及标准库函数 字符串中有效字符的统计字符串的复制字符串的连接字符串中字符的查找字符串中字符的插入和删除字符串的比较和子串的查找字符串中子串的插入和删除字符串与二维字符数组 7 2 8字符串与二维字符数组 使用二维字符数组组织多个字符串二维字符数组的定义char数组名 常量表达式1 常量表达式2 其中 常量表达式1 表示行数 即字符串的个数 常量表达式2 表示最长字符串所需要的存储长度二维字符数组的初始化例如有二维数组定义 数据存储如图7 4所示 Chara 5 10 C English Computer Physics Maths 7 2 8字符串与二维字符数组 例7 29将若干个从键盘输入的字符串按升序排列并输出 7 2 8字符串与二维字符数组 使用字符指针数组组织多个字符串C语言中常用指针数组处理多个字符串 字符指针数组的定义char 数组名 常量表达式 字符指针数组的初始化字符串数据 或字符数组 的首地址为初始化值 如 char p C ENGLISH COMPUTER 表示定义了3个元素的字符指针数组 其数组元素是字符指针变量 分别指向对应的字符串 7 2 8字符串与二维字符数组 p 图7 5用字符指针数组组织字符串 7 2 8字符串与二维字符数组 使用字符指针数组组织字符串注意事项定义字符指针数组后 在没有对这些指针变量赋予地址值之前 它们都是空指针 char p 10 p 0 are 正确赋值 使p 0 指向串 are p 2 NULL 正确赋值 使p 2 的值为空gets p 1 错误输入 p 1 是空指针scanf s p 5 错误输入 p 5 是空指针例7 30重写例7 29程序 要求使用字符指针数组组织多个字符串数据
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!