1、UNEQUAL。(3)联接。C将两串拼接产生结果串,它的内部名和串值都显示出来。(4)求长度。L串标识显示串的长度。(5)求子串。S+数2如果参数合法,则显示子串的内部名和串值。数不带正负号。(6)子串定位。I显示第二个串在第一个串中首次出现时的起始位置。(7)串替换。R串标识3将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。(8)显示。P显示所有在系统中被保持的串的内部名和串值的对照表。(9)删除。D内部名删除该内部名对应的串,即赋值的逆操作。(10)退出。Q结束程序的运行。在上述命令中,如果一个自变量是串,则应首先建立它。基本操作函数的结果(即函数值)如果
2、是一个串,则应在尚未分配的区域内新辟空间存放。【测试数据】自定。但要包括以下几组:(1)E,应显示(2)Eabcabcd(3)C(4)Ia,应报告:参数非法。(5)Raaaaab,应显示ba(6)Raaabcaab,应显示aabaabaabbc。(7)RFaaaaaaaaaaaaab,=0 数据关系:R1=|ai-1,aiD, i=1,2,n 基本操作: compare(hstring s,hstring t) 初始条件:S和T是已存在的Hstring类型。 操作结果:比较其值,显示结果“UNEQUAL”或“EQUAL”。 length(hstring s)S是已存在的Hstring类型。返回
3、该串的长度。 concat(hstring &t,hstring s1,hstring s2)S1和S2是已存在的Hstring类型。由S1和S2联接成新串。 index(hstring s,hstring t,int pos)显示第二个串在第一个串中首次出现的起始位置。 replace(hstring &s,hstring t,hstring v)M、t和v是已存在的Hstring类型。将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。 sub (hstring &sub,hstring s,int pos,int len)如果参数合法,则显示子串的内部名和串
4、值 。 display(HString S)显示串S的内部名和串值 。 copy(hstring &t,hstring s)由串s复制得串tgetin(int n)处理命令串S1,把串值存入串头表中ADT String三、详细设计1、自定义数据类型typedef struct hstring char *ch; int length;hstring;hstring headlist100; /串头数组2、基本操作函数1、赋值void strassign() char c; int i; char a20; while(c=getchar()!=n) if(c= i=0;) ai+=c; hea
5、dlistcurnum.ch=(char*)malloc(i+1)*sizeof(char); headlistcurnum.length=i; for(i=0;i=48&c=57)/还是数字 bi=0; sj=atoi(b); j+; sj+=curnum+; if(s0=curnum|s1=curnum) 参数不合法n else j=strcompare(headlists0,headlists1); if(j=0) printf(EQUALn else printf(UNEQUALn3、求长void length() sj=curnum+;=curnum) printf( return;
6、%dn,headlists0.length);4、连接void concat() 连接后串内部名:,curnum); strconcat(headlistcurnum+,headlists0,headlists1);5、子串定位void index() ,strindex(headlists0,headlists1,1);6、显示void display() int i,j;);curnum;i+) n内部名%d ,i); for(j=0;jheadlisti.length;j+) ,headlisti.chj);7、删除void Delete() =curnum) printf( else
7、clearstring(headlists0);8 求子串void sub() j=substring(headlistcurnum,headlists0,s1,s2); if(j=1) 子串内部名:%d s2;,headlistcurnum.chi); 9、替换void replace() strcopy(headlistcurnum,headlistcurnum-3); strreplace(headlistcurnum-1,headlistcurnum-3,headlistcurnum-2);headlistcurnum-1.length;%C3、主函数void main() *n A:
8、赋值 E:判相等 C:联接 L:求长度 n S:求子串 I:子串定位 R:串替换 P:显示n D:删除 Q:退出n printf(请输入命令:while(c=getchar()!Q switch(c) case E: compare();printf(串数: break;A strassign();break;L length();C concat();n串数:I index();P display();D Delete();S sub();R replace();四、调试分析五、用户手册1.本程序的运行环境为DOS操作系统,执行文件为:数据结构课程设计.exe.2.进入程序后即会显示可以使用
9、的命令和命令用途和对应命令的语法格式的列表,用户可以根据命令列表输入正确的命令。如果输入正确就会显示相应的结果,接着可以输入下一条命令。如果输入错误,会显示相应的错误的原因并提示重新输入命令。3.命令是以回车为结束的标志。4.本程序只能输入字符串,且字符串支持空格符,不过字符串必须用双单引号括住。所以Delete命令需要输入的数字也必须用双单引号括住。但命令Substring并不需要如此,在提示“请输入子串的开始位置:”和“请输入子串的结束中位置:”直接输入数字即可。5.命令Subsring在输出正确结果后会接着输出“此命令不存在!请重新输入!”此提示,此问题一直都没有解决,也是该程序的缺陷,
10、但是结果是正确的。6.若要退出程序,请键入命令:Q。六、测试结果 (1)E 命令输出的结果为:EQUAL (2)E abc abcdUNEQUAL (3) I a 语法格式错误! (4)R aaa aab 命令输出的结果为:ba (5)R aaabca aabaabaabaabbc (6)R aaaaaaaa aaaa ababab (7)A string 新赋值的字符串的内部名为:4,串值为:string七、实验中出现的问题、解决方法和心得体会这个实验是对串的操作的时间,实现串操作的基本函数,在接受命令的输入格式方面,试了很多种方法。开始时尝试过用getchar()函数来接收命令,并根据接受
11、到的指令进行操作。在调试程序的过程中,遇到一些结果不正确或超出范围的情况,又要重新返回相应的函数进行检查和修改补充,才能使程序更加健壮和完整,才能做出一个更加实用的软件八、附录源程序#includestdlib.hmath.hmalloc.hint curnum=0; /系统中现有的串的数目int s3; /命令的串参数的内部名(最多3)char a20;char b5;int strcompare(hstring s,hstring t) /若st,则返回值0;若s=t,则返回值=0;若st,则返回值s.length&t.length;+i) if(s.chi!=t.chi) return
12、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联接而成的新串 if(t.ch) free(t.ch); if(!(t.ch=(char*)malloc(s1.length+s2.length+1)*sizeof(char) overflownreturn;=s1.length-1; t.chi=s1.chi; t.length=s1.length+s2.length; for(i=s1.length,j=0;=t.length-1;i+,j+) t.chi=s2.chj;,t.chi);int substring(hstring &sub,hstring s,int pos,int len) /用sub返回串s的第pos
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1