欢迎来到天天文库
浏览记录
ID:59261628
大小:24.50 KB
页数:6页
时间:2020-09-08
《2015数据结构习题-字符串.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、线性表(顺序串)习题2015说明:(1)这次的作业任意选择,组合满15分即可。(2)如无特殊说明,这里的字符串均为C语言Null-Terminated(NT)字符串!(3)字符串可能很短,也可能来自一个文本文件,如一篇小说。(4)除测试部分用printf打印结果外,程序中不得出现任何库函数。(5)涉及判读字符类型的部分,可以复习一下ASCII码表。(6)各题必须有头文件(Ex##.H)和C文件(Ex##.C),“##”为题号。(7)应自己分析算法的时间和空间复杂度,写在程序开头部分。(8)每一题必须
2、附有进行功能测试的main()函数,能够独立编译成exe文件。以下Ex01-03需要自己写出完整的函数原型,可能有难度。自告奋勇提前提交函数原型部分(*.H)供大家参考的同学,一旦被选中作为标准模板,额外奖励5分。Ex01(本题2分):用以下定义的SEQ_STRING字符串类型代替NT字符串,分别写出与Ansi-C标准库函数功能相应的处理函数。Ansi-C库函数SEQ_STRING的处理函数功能说明strlenSeqString_Length求串长strcpySeqString_Copy串拷贝str
3、catSeqString_Cat串连接strstrSeqString_SearchStr找子串strchrSeqString_SearchChr找字符#defineMAXLEN65535typedefstruct{size_tlen;//串长chardata[MAXLEN+1];//字符数组}SEQ_STRING;Ex02(本题2分):同上题,但将字符串类型定义改为如下。#defineMAXLEN65535typedefstruct{size_tlast;//尾字符下标chardata[MAXLEN
4、+1];//字符数组}SEQ_STRING;Ex03(本题3分):基于NT字符串,或Ex01或Ex02的字符串定义,写出如下函数。函数名功能说明1SeqString_InsertStr在串str的指定位置pos(从0开始)插入子串2SeqString_DeleteStr在串str的指定位置pos(从0开始)删除子串3SeqString_Sort将串str中字符重新排序,以参数dir指定正排序(dir=+1)或逆排序(dir=-1)Ex04(本题4分):上一题,设分配给串str的空间有限,为MAXSI
5、ZE(字节数,结尾的0字符也算在内),插入后有可能超出,重写对应函数,保证不发生非法内存访问。Ex05(本题1分):编写字符串检查函数String_Check,查找是否字符串str中所有字符都属于字符串range,如果有字符不属于,返回第一个不属于的字符的指针,否则返回NULL。Ex06(本题1分):编写字符串对齐函数String_Align,将字符串s变为指定长度n的右对齐字符串,结果放在字符数组t中。如果s较短,在左侧填充适当数量的空格。如果s过长,截断右侧超出部分,并在尾部放一个问号“?”。问
6、号算在长度n里。假设分配给t的空间足够。Ex07(本题2分):写一个函数String_Stat统计在字符串str中各个不同字符出现的频度并将每种字符(重复出现的字符算1种)按频度从大到小排序,存放在整数数组freq_list中。假设freq_list空间足够。函数返回值为字符的种类数,也就是freq_list的实际长度。Ex08(本题2分):写函数String_TestType按C语言语法规则判断一个字符串的类型,用枚举类型STRTYPE表示。类型包括:KEYWORD(关键字)IDENTIFIER(
7、标识符)SYMBOL(符号,指{}[](),;和各种运算符)NUMBER(数字,只考虑整数,负数前面的负号算SYMBOL,不用考虑)CHAR(字符常量,用单引号括起来的,不用考虑转义字符)STRINGC(字符串常量,用双引号括起来的,不用考虑转义字符)Ex09(本题2分):设计文本字符串编码函数String_Encode,listSrcCode和listDstCode是连个线性表,两表中元素均为字符串且一一对应,将给定字符串str中所有与listSrcCode中元素匹配的片段替换为listDstCo
8、de中相应的元素。Ex10(本题4分):设计一个单行文本匹配函数String_Match,找出字符串str中与表达式exp匹配的“第一个”子串,返回子串指针,NULL表示未找到。参数dir表示查找方向:dir=+1,正向(头→尾)找;dir=-1,逆向(尾→头)找。表达式exp支持通配符:“?”表示任一个字符,“*”表示从该位置开始的0到任意多个任意字符。例如:“abc*”,表示前3个是“abc”,之后为任意多个任意字符;“abc*def”跟“abc*”其实没有任何不
此文档下载收益归作者所有