1、数据结构课程设计题 目 串基本操作的演示 学 院 计算机学院 专 业 网络工程 序号:11一.、课程设计任务要求在教科书 4.2.2 节用堆分配存储表示实现 HString 串的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用 C 语言本身提供的串函数) 。参数合法性检查必须严格。 说明:(在格式中, 表示 0 个、 1 个或多个空格所组成的串。 串标识表示一个内部名或一个串文字。前者是一个串的唯一标识,是一种内部形式的(而不是字符形式的)标识符。后者是两端由单引号括起来的仅可打印字符组成的序列。串内每两个连续的单引号表示一个单引号符。 ) 利用上述基本操作函数构造以下系统:它是
2、一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下: (1)赋值。格式:A串标识回车 用串标识所表示的值建立新串,并显示新串的内部名和串值。如:A Hi!(2) 判相等。 格式:E串标识 1 串标识 2回车 若两串相等,则显示“EQUAL” ,否则显示 “UNEQUAL”。 (3) 联接。 格式:C串标识 1串标识 2回车 将两串联接产生结果串,它的内部名和串值都显示出来。 (4) 求长度 格式:L串标识回车 显示串的长度。 (5) 求子串 格式:S串标识+ 数 1+数 2回车 如果参数合法,则显示子串的内部名和串值。 数不带正负号。 (6)子串定位。
3、格式:I串标识 1串标识 2回车 显示第二个串在第一个串中首次出现时的位置。 (7)串替换 格式:R串标识 1串标识 2串标识 2回车将第一个串中出现所有出现的第二个串用第三个串替换,显示结果串的内部名和 串值,原串不变。 (8)显示。格式 P回车显示所有在系统中被保持的串的内部名和串值的对照表(9)删除。格式 D内部名回车删除该内部名对应的串,即赋值的逆操作。(0)退出 格式:Q回车 结束程序的运行。二、已完成的项目及完成程度 (1) 赋值。 StrAssign(SqString /若是非空串,则按串长分配存储区,否则 ch 为 NULLint length; /串长度HString;4、主
4、要算法流程图E C L S R D Q 主函数菜单函数的选择SrtAssign()赋值函数AStrEqual()判断相等函数Concatenate()串的连接函数StrLength()串的长度函数SubSrt()提取子串函数RepStr()串的替代函数DelStr()串的删除函数Quit()退出5、主要代码引用的头文件:#include #include #include 使用的结构体:typedef struct char dataMaxSize;/存放串字符int len; /串长SqString;关键函数功能实现: void Scanf(char cstrr) / 输入字符串cstrr1
5、00;printf(“Enter a string:n“);/提示用户输入字符串int j=0;while(cstrrj=getchar()!=n)j+;cstrrj=0;/串赋值void StrAssign(SqString int i;for(i=0;cstri!=0;i+)s.datai=cstri;s.len=i;/判断串是否相等int StrEqual(SqString s,SqString t)int same=1,i;if (s.len!=t.len) /长度不相等时返回same=0;else for (i=0;is.len|js.len)return str; /参数不正确时返
6、回空串for(k=i-1;ks.len|i+j-1s.len) /参数不正确时返回空串return str;for(k=0;ks.len| i+js.len+1) /参数不正确时返回空串printf(“参数不正确n“);return str;for (k=0;kt.datai)return 1;if(s.len=t.len) return 0; /s=telse if(s.lent/输出串void DispStr(SqString str)int i;if (str.len0)for (i=0;istr.len;i+)printf(“%c“,str.datai);printf(“n“);/ 菜
7、单函数void menus()int i,j,m,x,y;char n;printf(“*n“);printf(“* A 赋值 E 判断相等 C 联接*n“);printf(“* L 求长度 S 求子串 I 子串定位*n“);printf(“* R 串替换 P 显示 D 删除 *n“);printf(“* Q 退出 *n“);scanf(“%c“,getchar();switch(n)case A:case a:printf(“A 请输入需要赋值的串 n“);StrAssign(str1,cstr1);printf(“输出 str1=“);DispStr(str1);menus();break
8、;case E:case e:printf(“E 判断串 str1 和 str2 是否相等:n“);StrAssign(str1,cstr1);StrAssign(str2,cstr2);m=StrEqual(str1,str2);if(m=1)printf(“EQUALn“);elseprintf(“NUEQUALn“);menus();break;case C:case c:printf(“输入要连接的两个串:n“);printf(“将串 str1 和串 str2 连接起来形成串 s1:n“);StrAssign(str1,cstr1);StrAssign(str2,cstr2);s1=C
9、oncat(str1,str2);DispStr(s1);menus();break;case L:case l:printf(“输入要求长度的串:n“);StrAssign(str1,cstr1);printf(“str1 的长度为:%dn“,StrLength(str1);menus();break;case S:case s:printf(“提取串 str1 的第 a 个字符开始的 b 个字符而产生串 s2n“);StrAssign(str1,cstr1);int a,b;scanf(“%d %d“,s2=SubStr(str1,a,b);DispStr(s2);menus();brea
10、k;case R:case r:printf(“在串 str1 中,将第 p 个字符开始的 q 个字符构成的子串用 str2替换,形成 s3:n“);StrAssign(str1,cstr1);int p,q;scanf(“%d %d“,StrAssign(str2,cstr2);s3=RepStr(str1,p,q,str2);DispStr(s3);menus();break;case D:case d:printf(“从串 str1 中删去第 i 个字符开始的长度为 j 的子串,形成串s3:n“);StrAssign(str1,cstr1);int x,y;scanf(“%d %d“,s3=DelStr(str1,x,y);DispStr(s3);menus();break;case Q:case q:break;