您好,欢迎访问三七文档
信息科学与技术学院《数据结构》课程设计报告完成日期:题目名称:串的基本操作演示专业班级:学生姓名:学生学号:指导教师:目录一、需求分析......................................................................................................................................................................1二、概要设计......................................................................................................................................................................2三、详细设计......................................................................................................................................................................21、自定义数据类型....................................................................................................................................................22、基本操作函数........................................................................................................................................................33、主函数....................................................................................................................................................................8四、调试分析......................................................................................................................................................................9五、用户手册....................................................................................................................................................................10六、测试结果....................................................................................................................................................................11七、实验中出现的问题、解决方法和心得体会.............................................................................................................11八、附录............................................................................................................................................................................111一、需求分析【问题描述】如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试实现串类型,并写一个串的基本操作的演示系统。【基本要求】在教科书4.2.2节用堆分配存储表示实现HString串类型的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数)。参数合法性检查必须严格。利用基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下:(1)赋值。格式:A串标识回车用串标识所表示的串的值建立新串,并显示新串的内部名和串值。例:A‘Hi!’(2)判相等。格式:E串标识1串标识2回车若两串相等,则显示EQUAL,否则显示UNEQUAL。(3)联接。格式:C串标识1串标识2回车将两串拼接产生结果串,它的内部名和串值都显示出来。(4)求长度。格式:L〈串标识回车显示串的长度。(5)求子串。格式:S串标识+数1+数2回车如果参数合法,则显示子串的内部名和串值。数不带正负号。(6)子串定位。格式:I串标识1串标识2回车显示第二个串在第一个串中首次出现时的起始位置。(7)串替换。格式:R串标识1串标识2串标识3回车将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。(8)显示。格式:P回车显示所有在系统中被保持的串的内部名和串值的对照表。(9)删除。格式:D内部名回车删除该内部名对应的串,即赋值的逆操作。(10)退出。格式:Q回车结束程序的运行。在上述命令中,如果一个自变量是串,则应首先建立它。基本操作函数的结果(即函数值)如果是一个串,则应在尚未分配的区域内新辟空间存放。【测试数据】自定。但要包括以下几组:(1)E‘’‘’回车,应显示EQUAL。(2)E‘abc’‘abcd’回车,应显示UNEQUAL。(3)C‘‘‘‘回车,应显示。(4)I‘a’‘’回车,应报告:参数非法。(5)R‘aaa’‘aa’‘b’回车,应显示'ba’(6)R‘aaabc’‘a’‘aab’回车,应显示’aabaabaabbc’。(7)R‘Faaaaaaaa’‘aaaa’‘ab’,2回车,应显示’Fabab’。二、概要设计实现串的抽象数据类型和实现其基本操作,程序中将涉及下列抽象数据类型:1.定义串的基本主结构ADTString{数据对象:D={ai|ai∈charcaterset,i=1,2,…,n,n=0}数据关系:R1={ai-1,ai|ai-1,ai∈D,i=1,2,…,n}基本操作:compare(hstrings,hstringt)初始条件:S和T是已存在的Hstring类型。操作结果:比较其值,显示结果“UNEQUAL”或“EQUAL”。length(hstrings)初始条件:S是已存在的Hstring类型。操作结果:返回该串的长度。concat(hstring&t,hstrings1,hstrings2)初始条件:S1和S2是已存在的Hstring类型。操作结果:由S1和S2联接成新串。index(hstrings,hstringt,intpos)初始条件:S和T是已存在的Hstring类型。操作结果:显示第二个串在第一个串中首次出现的起始位置。replace(hstring&s,hstringt,hstringv)初始条件:M、t和v是已存在的Hstring类型。操作结果:将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。sub(hstring&sub,hstrings,intpos,intlen)初始条件:S是已存在的Hstring类型。操作结果:如果参数合法,则显示子串的内部名和串值。display(HStringS)初始条件:S是已存在的Hstring类型。操作结果:显示串S的内部名和串值。copy(hstring&t,hstrings)初始条件:S是已存在的Hstring类型。操作结果:由串s复制得串tgetin(intn)初始条件:处理命令串S1,操作结果:把串值存入串头表中}ADTString三、详细设计1、自定义数据类型3typedefstructhstring{char*ch;intlength;}hstring;hstringheadlist[100];//串头数组2、基本操作函数1、赋值voidstrassign(){charc;inti;chara[20];while((c=getchar())!='\n'){if(c=='\''){i=0;while((c=getchar())!='\'')a[i++]=c;headlist[curnum].ch=(char*)malloc((i+1)*sizeof(char));headlist[curnum].length=i;for(i=0;iheadlist[curnum].length;i++)headlist[curnum].ch[i]=a[i];curnum++;}}printf(内部名:%d串值:,curnum-1);for(i=0;i=headlist[curnum-1].length-1;i++)printf(%c,headlist[curnum-1].ch[i]);printf(\n);}2比较voidcompare(){charc;inti,m,n,j=0;while((c=getchar())!='\n'){if(c=48&&c=57){i=0;b[i++]=c;while((c=getchar())=48&&c=57)//还是数字b[i++]=c;b[i]='\0';s[j]=atoi(b);j++;}4if(c=='\''){i=0;while((c=getchar())!='\'')a[i++]=c;headlist[curnum].ch=(char*)malloc((i+1)*sizeof(char));headlist[curnum].length=i;for(i=0;iheadlist[curnum].length;i++)headlist[curnum].ch[i]=a[i];s[j++]=curnum++;}}if(s[0]=curnum||s[1]=curnum)printf(参数不合法\n);else{j=strcompare(headlist[s[0]],headlist[s[1]]);if(j==0)printf(EQUAL\n);elseprintf(UNEQUAL\n);}}3、求长voidlength(){charc;inti,m,n,j=0;while((c=getchar())!='\n'){if(c=48&&c=57){i=0;b[i++]=c;while((c=getchar())=48&&c=57)//还是数字b[i++]=c;b[i]='\0';s[j]=atoi(b);j++;}if(c=='\''){i=0;while((c=getchar())!='\'')a[i++]=c;headlist[curnum].ch=(char*)malloc((i+1)*sizeof(char));headlist[c
本文标题:串基本操作的演示
链接地址:https://www.777doc.com/doc-4383854 .html