实验三实验报告串.docx
- 文档编号:3705052
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:11
- 大小:255.38KB
实验三实验报告串.docx
《实验三实验报告串.docx》由会员分享,可在线阅读,更多相关《实验三实验报告串.docx(11页珍藏版)》请在冰豆网上搜索。
实验三实验报告串
数据结构实验报告
报告名称串的操作
专业网络工程
班级1001
学号
姓名
指导教师
2012年5月8日
一、实验目的:
熟悉串类型的实现方法,了解简单文字处理的设计方法。
二、实验内容与基本要求:
1.设计可以在主串s中第i个位置之前插入一个子串t的程序。
2.设计可以在主串s中从第i个位置开始共取m个字符,求子串的程序。
3.设计一个程序求子串t在主串s中的起始位置
三、概要设计:
1.数据结构:
#include
#defineMaxSize100/*最多的字符个数*/
typedefstruct
{chardata[MaxSize];/*定义可容纳MaxSize个字符的空间*/
intlen;/*标记当前实际串长*/
}SqString;
2.抽象数据类型:
ADTString{
数据对象:
D={ai|ai∈CharacterSet,
i=1,2,...,n,n≥0}
数据关系:
R1={
StrAssign(&T,chars)
初始条件:
chars是字符串常量。
操作结果:
把chars赋为T的值。
StrCopy(&T,S)
初始条件:
串S存在。
操作结果:
由串S复制得串T。
DestroyString(&S)
初始条件:
串S存在。
操作结果:
串S被销毁。
StrEmpty(S)
初始条件:
串S存在。
操作结果:
若S为空串,则返回TRUE,
否则返回FALSE。
StrCompare(S,T)
初始条件:
串S和T存在。
操作结果:
若ST,则返回值0;
若ST,则返回值0;
若ST,则返回值0。
StrLength(S)
初始条件:
串S存在。
操作结果:
返回S的元素个数,
称为串的长度。
Concat(&T,S1,S2)
初始条件:
串S1和S2存在。
操作结果:
用T返回由S1和S2联接而成的新串
SubString(&Sub,S,pos,len)
初始条件:
串S存在,1≤pos≤StrLength(S)
且0≤len≤StrLength(S)-pos+1。
操作结果:
用Sub返回串S的第pos个字符起
长度为len的子串。
Index(S,T,pos)
初始条件:
串S和T存在,T是非空串,1≤pos≤StrLength(S)。
操作结果:
若主串S中存在和串T值相同
的子串,则返回它在主串S中第pos个
字符之后第一次出现的位置;
否则函数值为0。
Replace(&S,T,V)
初始条件:
串S,T和V均已存在且T是非空串。
操作结果:
用V替换主串S中出现的所有与(模式串)T
相等的不重叠的子串。
StrInsert(&S,pos,T)
初始条件:
串S和T存在,
1≤pos≤StrLength(S)+1。
操作结果:
在串S的第pos个字符之前
插入串T。
StrDelete(&S,pos,len)
初始条件:
串S存在
1≤pos≤StrLength(S)-len+1。
操作结果:
从串S中删除第pos个字符
起长度为len的子串。
ClearString(&S)
初始条件:
串S存在。
操作结果:
将S清为空串
四、调试分析及测试结果:
测试数据:
1.在主串s(abcdefg)中第3个位置之前插入一个子串t(apple),输出新串。
2.在主串s(thisisacprogram)中从第5个位置开始共取3个字符,求子串的程序。
3.主串s(thekingisababyandstrong),子串t(isababy),输出子串t在主串s中的起始位置。
测试结果及分析:
图一
1.程序通过编译后,运行程序。
进入选择界面,该程序主要实现三个功能,如图一所示。
“1.在主串s中第i个位置之前插入一个子串;2.在主串s中从第i个位置开始共取m个字符,求子串;3.求子串t在主串s中的起始位置。
”此界面通过switch分支语句实现。
按相应的数字键进入相应的功能。
图二
2.按数字键1键实现串的插入功能。
输入主串“xyzmnwaxy”,依照提示输入子串“xyz”,选择插入的位置为i=2;按回车键结束,输入新串为“xxyzyzmnwaxy”,程序运行正确,输出结果无误。
在程序运行过程中,调用串的创建StrAssign()函数,插入字符InsStr()函数,以及字符串的输出DispStr()函数。
图三
3.输入数字2,进入从主串中的第i个位置开始共取m个字符,求子串的操作。
该操作主要是SubStr()函数的实现。
输入主字符串“abcdef”,从位置2开始取长度为3的字符串,输出结果为“bcd”,程序运行完毕,进入功能选择。
图四
4.进入功能4,求子串在主串s中的起始位置t;该过程主要实现Index()的用法。
这里采用的是Brut—Force算法,虽然浪费了不少内存空间,但也能实现其功能,输入主串后,在输入其子串,匹配成功,找到其子串在主串中出现的起始位置。
如需改进可以考虑KMP算法。
图五
5.输入数字4,程序执行完毕。
五、实验心得及经验教训
通过此次实验,我对C语言以及数据结构有了更深刻的了解,增强了程序的便编写能力,将理论知识和实际操作结合起来,更进一步巩固了知识,而且在对程序模块化观念也模糊逐渐的清晰了。
,同时通过C语言,掌握了数据结构串的一些基本算法。
在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,还有老师和同学的帮助,不停地修改与调试,终于完成了这个实验。
总之,在以后的试验中,我们必须认真仔细,而且要学会团队合作,互相讨论,这样不仅学到很多知识,而且还会提高效率。
同时我们在实验前还必须做好复习,这样在编写程序的时候才会得心应手。
不管怎么样,在这一次试验中,我不仅学到了知识而且也学到了经验。
附:
六、源程序
#include
#defineMaxSize100/*最多的字符个数*/
typedefstruct
{chardata[MaxSize];/*定义可容纳MaxSize个字符的空间*/
intlen;/*标记当前实际串长*/
}SqString;
voidStrAssign(SqString&str,charcstr[])/*str为引用型参数*/
{
inti;
chara[MaxSize];
gets(a);
cstr=a;
for(i=0;cstr[i]!
='\0';i++)
str.data[i]=cstr[i];
str.len=i;
}
SqStringInsStr(SqStrings1,inti,SqStrings2)
{
intj;
SqStringstr;
str.len=0;
if(i<=0||i>s1.len+1)/*参数不正确时返回空串*/
{
printf("参数不正确\n");
returns1;
}
for(j=0;j str.data[j]=s1.data[j]; for(j=0;j str.data[i+j-1]=s2.data[j]; for(j=i-1;j str.data[s2.len+j]=s1.data[j]; str.len=s1.len+s2.len; returnstr; } SqStringSubStr(SqStrings,inti,intj) { SqStringstr; intk; str.len=0; if(i<=0||i>s.len||j<0||i+j-1>s.len) { printf("参数不正确\n"); returnstr;/*参数不正确时返回空串*/ } for(k=i-1;k str.data[k-i+1]=s.data[k]; str.len=j; returnstr; } intIndex(SqStrings,SqStringt){ inti=0,j=0; while(i if(s.data[i]==t.data[j]){ i++; j++; } else{ i=i-j+1; j=0; } } if(j>=t.len) return(i-t.len+1); else return(-1); } voidDispStr(SqStringstr) { inti; if(str.len>0) { for(i=0;i printf("%c",str.data[i]); printf("\n"); } } main() { SqStrings,s0,s1,s2,s3,s4,s5; char*p,*q,*r,*l,*m; intc,x,y,z,w; printf("/*******************本程序可实现如下功能*********************/\n"); printf("\t1.在主串s中第i个位置之前插入一个子串t\n\t2.在主串s中从第i个位置开始共取m个字符,求子串t\n\t3.求子串t在主串s中的起始位置t\n\t4.退出程序\n"); while(c) { printf("请选择您要进入的功能: ");scanf("%d",&x); switch(x) { case1: getchar(); printf("请输入主串S: "); StrAssign(s1,p); printf("请输入子串T: "); StrAssign(s2,q); printf("请输入插入位置i: "); scanf("%d",&y); InsStr(s1,y,s2); s=InsStr(s1,y,s2); printf("输出新串为: "); DispStr(s); break; case2: getchar(); printf("请输入主串S: "); StrAssign(s3,r); printf("从位置y开始取长度为z的子串: \n"); scanf("%d%d",&y,&z); SubStr(s3,y,z); s0=SubStr(s3,y,z); printf("输出子串为: "); DispStr(s0); break; case3: getchar(); printf("请输入主串S: "); StrAssign(s4,l); printf("请输入子串T: "); StrAssign(s5,m); Index(s4,s5); w=Index(s4,s5); if(w) printf("主串和子串在第%d个字符处首次匹配\n",w); else printf("主串和子串匹配不成功\n"); break; case4: getchar();c=0;break; default: printf("输入错误,请重试! \n"); break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)