ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:34.36KB ,
资源ID:4277716      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4277716.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(串基本操作的演示附带源代码.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

串基本操作的演示附带源代码.docx

1、串基本操作的演示附带源代码信息科学与技术学院数据结构课程设计报告题目名称:串的基本操作演示专业班级:学生姓名:学生学号:指导教师: 完成日期:一、需求分析【问题描述】如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试实现串类型,并写一个串的基本操作的演示系统。【基本要求】在教科书4.2.2节用堆分配存储表示实现HString串类型的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数)。参数合法性检查必须严格。利用基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命

2、令,直至终止程序的命令为止。命令定义如下:(1)赋值。格式:A用所表示的串的值建立新串,并显示新串的内部名和串值。例:AHi!(2)判相等。格式:E若两串相等,则显示EQUAL,否则显示UNEQUAL。(3)联接。格式:C将两串拼接产生结果串,它的内部名和串值都显示出来。(4)求长度。格式:L串标识显示串的长度。(5)求子串。格式:S+如果参数合法,则显示子串的内部名和串值。不带正负号。(6)子串定位。格式:I显示第二个串在第一个串中首次出现时的起始位置。(7)串替换。格式:R将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。(8)显示。格式:P显示所有在系统中

3、被保持的串的内部名和串值的对照表。(9)删除。格式:D删除该内部名对应的串,即赋值的逆操作。(10)退出。格式:Q结束程序的运行。在上述命令中,如果一个自变量是串,则应首先建立它。基本操作函数的结果(即函数值)如果是一个串,则应在尚未分配的区域内新辟空间存放。【测试数据】自定。但要包括以下几组:(1)E,应显示EQUAL。(2)Eabcabcd,应显示UNEQUAL。(3)C,应显示。(4)Ia,应报告:参数非法。(5)Raaaaab,应显示ba(6)Raaabcaaab,应显示aabaabaabbc。(7)RFaaaaaaaaaaaaab,应显示Fabab。二、概要设计 实现串的抽象数据类型

4、和实现其基本操作,程序中将涉及下列抽象数据类型: 1定义串的基本主结构 ADT String 数据对象:D=ai| aicharcaterset,i=1,2,n,n=0 数据关系:R1=|ai-1,aiD, i=1,2,n 基本操作: compare(hstring s,hstring t) 初始条件:S和T是已存在的Hstring类型。 操作结果:比较其值,显示结果“UNEQUAL”或“EQUAL”。 length(hstring s) 初始条件:S是已存在的Hstring类型。 操作结果:返回该串的长度。 concat(hstring &t,hstring s1,hstring s2) 初

5、始条件:S1和S2是已存在的Hstring类型。 操作结果:由S1和S2联接成新串。 index(hstring s,hstring t,int pos) 初始条件:S和T是已存在的Hstring类型。 操作结果:显示第二个串在第一个串中首次出现的起始位置。 replace(hstring &s,hstring t,hstring v) 初始条件:M、t和v是已存在的Hstring类型。 操作结果:将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。 sub (hstring &sub,hstring s,int pos,int len) 初始条件:S是已存在的H

6、string类型。 操作结果:如果参数合法,则显示子串的内部名和串值 。 display(HString S) 初始条件:S是已存在的Hstring类型。 操作结果:显示串S的内部名和串值 。 copy(hstring &t,hstring s) 初始条件:S是已存在的Hstring类型。 操作结果:由串s复制得串tgetin(int n) 初始条件:处理命令串S1, 操作结果:把串值存入串头表中 ADT String三、详细设计1、自定义数据类型typedef struct hstring char *ch; int length; hstring; hstring headlist100;

7、 /串头数组2、基本操作函数1、赋值void strassign() char c; int i; char a20; while(c=getchar()!=n) if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;iheadlistcurnum.length;i+) headlistcurnum.chi=ai; curnum+; printf(内部名:%d 串值:,curnum-1); for(i=

8、0;i=48&c=48&c=57)/还是数字 bi+=c; bi=0; sj=atoi(b); j+; if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;i=curnum|s1=curnum) printf(参数不合法n); else j=strcompare(headlists0,headlists1); if(j=0) printf(EQUALn); else printf(UNEQUALn);

9、 3、求长void length() char c; int i,m,n,j=0; while(c=getchar()!=n) if(c=48&c=48&c=57)/还是数字 bi+=c; bi=0; sj=atoi(b); j+; if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;i=curnum) printf(参数不合法n); return; printf(%dn,headlists0.len

10、gth); 4、连接void concat() char c; int i,m,n,j=0; while(c=getchar()!=n) if(c=48&c=48&c=57)/还是数字 bi+=c; bi=0; sj=atoi(b); j+; if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;i=curnum|s1=curnum) printf(参数不合法n); else printf(连接后串内部

11、名:%d 串值:,curnum); strconcat(headlistcurnum+,headlists0,headlists1); 5、子串定位void index() char c; int i,m,n,j=0; while(c=getchar()!=n) if(c=48&c=48&c=57)/还是数字 bi+=c; bi=0; sj=atoi(b); j+; if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i;

12、 for(i=0;i=curnum|s1=curnum) printf(参数不合法n); else printf(%dn,strindex(headlists0,headlists1,1); 6、显示void display() int i,j; char c; while(c=getchar()!=n); for(i=0;icurnum;i+) printf(n内部名%d ,i); for(j=0;j=48&c=48&c=curnum) printf(参数不合法n); else clearstring(headlists0); 8 求子串void sub() char c; int i,m,

13、n,j=0; while(c=getchar()!=n) if(c=48&c=48&c=57)/还是数字 bi+=c; bi=0; sj=atoi(b); j+; if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;i=curnum) printf(参数不合法n); return; j=substring(headlistcurnum,headlists0,s1,s2); if(j=1) printf

14、(子串内部名:%d ,curnum); for(i=0;is2;i+) printf(%c,headlistcurnum.chi); curnum+; 9、替换void replace() char c; int i; char a20; while(c=getchar()!=n) if(c=) i=0; while(c=getchar()!=) ai+=c; headlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;iheadlistcurnum.length;i+) headlis

15、tcurnum.chi=ai; curnum+; strcopy(headlistcurnum,headlistcurnum-3); strreplace(headlistcurnum-1,headlistcurnum-3,headlistcurnum-2); for(i=0;iheadlistcurnum-1.length;i+) printf(%C,headlistcurnum-1.chi); printf(n); 3、主函数void main() char c; printf(*n); printf( A:赋值 E:判相等 C:联接 L:求长度 n S:求子串 I:子串定位 R:串替换

16、P:显示n D:删除 Q:退出n); printf(*n); printf(请输入命令:n); while(c=getchar()!=Q) switch(c) case E: compare();printf(串数:%dn,curnum); break; case A: strassign(); printf(串数:%dn,curnum);break; case L: length(); printf(串数:%dn,curnum);break; case C: concat(); printf(n串数:%dn,curnum);break; case I: index(); printf(n串数

17、:%dn,curnum);break; case P: display();printf(n); break; case D: Delete(); break; case S: sub(); break; case R: replace(); break; 四、调试分析五、用户手册1.本程序的运行环境为DOS操作系统,执行文件为:数据结构课程设计.exe.2.进入程序后即会显示可以使用的命令和命令用途和对应命令的语法格式的列表,用户可以根据命令列表输入正确的命令。如果输入正确就会显示相应的结果,接着可以输入下一条命令。如果输入错误,会显示相应的错误的原因并提示重新输入命令。3.命令是以回车为结

18、束的标志。4.本程序只能输入字符串,且字符串支持空格符,不过字符串必须用双单引号括住。所以Delete命令需要输入的数字也必须用双单引号括住。但命令Substring并不需要如此,在提示“请输入子串的开始位置:”和“请输入子串的结束中位置:”直接输入数字即可。5.命令Subsring在输出正确结果后会接着输出“此命令不存在!请重新输入!”此提示,此问题一直都没有解决,也是该程序的缺陷,但是结果是正确的。6.若要退出程序,请键入命令:Q。六、测试结果 (1)E 命令输出的结果为:EQUAL (2)E abc abcd 命令输出的结果为:UNEQUAL (3) I a 语法格式错误!请重新输入!

19、(4)R aaa aab 命令输出的结果为:ba (5)R aaabca aab 命令输出的结果为:aabaabaabbc (6)R aaaaaaaa aaaa ab 命令输出的结果为:abab (7)A string 命令输出的结果为: 新赋值的字符串的内部名为:4,串值为:string七、实验中出现的问题、解决方法和心得体会这个实验是对串的操作的时间,实现串操作的基本函数,在接受命令的输入格式方面,试了很多种方法。开始时尝试过用getchar()函数来接收命令,并根据接受到的指令进行操作。在调试程序的过程中,遇到一些结果不正确或超出范围的情况,又要重新返回相应的函数进行检查和修改补充,才能

20、使程序更加健壮和完整,才能做出一个更加实用的软件八、附录源程序#include #include #include #include typedef struct hstring char *ch; int length; hstring; hstring headlist100; int curnum=0; /系统中现有的串的数目int s3; /命令的串参数的内部名(最多3)char a20; char b5; int strcompare(hstring s,hstring t) /若st,则返回值0;若s=t,则返回值=0;若st,则返回值0; int i; for(i=0;is.le

21、ngth&it.length;+i) if(s.chi!=t.chi) return s.chi-t.chi; return s.length-t.length; void clearstring(hstring &s) /将s清为空串 if(s.ch) free(s.ch); s.ch=0; s.length=0; void strconcat(hstring &t,hstring s1,hstring s2) /用t返回由s1和s2联接而成的新串 int i,j; if(t.ch) free(t.ch); if(!(t.ch=(char*)malloc(s1.length+s2.length+1)*sizeof(char) printf(overflown);return; for(i=0;i=s1.length-1;i+) t.chi=s1.chi; t.length=s1.length+s2.length; for(i=s1.length,j=0;i=t.length-1;i+,j+) t.chi=s2.chj; for(i=0;it.length;i+) printf(%c,t.chi); int substring(hstring &sub,hstring s,int pos,int len) /用sub返回串s的第pos

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1