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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12389398.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语言本身提供的串函数)。参数合法性检查必须严格。 说明:(在格式中,表示0个、1个或多个空格所组成的串。串标识表示一个内部名或一个串文字。前者是一个串的唯一标识,是一种内部形式的(而不是字符形式的)标识符。

2、后者是两端由单引号括起来的仅可打印字符组成的序列。串内每两个连续的单引号表示一个单引号符。) 利用上述基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下: (1) 赋值。格式:A串标识回车 用串标识所表示的值建立新串,并显示新串的内部名和串值。如:AHi! (2) 判相等。 格式:E串标识1串标识2回车 若两串相等,则显示“EQUAL”,否则显示“UNEQUAL”。 (3) 联接。 格式:C串标识1串标识2回车 将两串联接产生结果串,它的内部名和串值都显示出来。 (4) 求长度 格式:L串标识回车 显示串的长度。 (5) 求

3、子串 格式:S串标识+数1+数2回车 如果参数合法,则显示子串的内部名和串值。数不带正负号。 (6)子串定位。 格式:I串标识1串标识2回车 显示第二个串在第一个串中首次出现时的位置。 (7)串替换 格式:R串标识1串标识2串标识2回车 将第一个串中出现所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。 (0)退出 格式:Q回车 结束程序的运行。 二、实验内容编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。具体如下:编写栈的基本操作函数顺序串类型定义如下所示:typedef struct node char data; struct node *next

4、;linkstring;(1)串赋值 Assign(s,t)将一个字符串常量赋给串s,即生成一个其值等于t的串s(2)串复制 StrCopy(s,t)将串t赋给串s(3)计算串长度 StrLength(s)返回串s中字符个数(4)判断串相等StrEqual(s,t)若两个串s与t相等则返回1;否则返回0。(5)串连接 Concat(s,t) 返回由两个串s和t连接在一起形成的新串。(6)求子串 index(s,j)返回找到串t在串s中的位置 (7)插入InsStr (s,i,t)将串t插入到串s的第i(1iStrLength(s)+1)个字符中,即将t的第一个字符作为s的第i个字符,并返回产生

5、的新串(8)串删除 DelStr (s,i,j)从串s中删去从第i(1iStrLength(s)个字符开始的长度为j的子串,并返回产生的新串。(9)串替换 RepStr (s,s1,s2)在串s中,将所有出现的子串s1均替换成s2。(10)输出串DispStr(s)输出串s的所有元素值(11)判断串是否为空 IsEmpty(s)(12)输入串inputchuan(char str100,linkstring *&s)输入字符串str并将字符串传递给指针串s三:程序:#include#include#includetypedef struct node char data; struct nod

6、e *next;linkstring;void assign(linkstring *&s,char t)/将字符串t赋值给指针串s,并返回s int i=0; linkstring *q,*tc; s=(linkstring *)malloc(sizeof(linkstring); s-next=NULL; tc=s;/tc指向s串的最后一个结点 while(ti!=0)/实现字符数组顺序赋值到串s q=(linkstring *)malloc(sizeof(linkstring); q-data=ti; tc-next=q;/使得s中与tc同地址的next指向q,使tc与q相连接 tc=q

7、;/tc直接指向q i+; tc-next=NULL;void strcopy(linkstring *&s,linkstring *t)/将t串赋值给s串并返回s linkstring *p=t-next,*q,*tc; s=(linkstring *)malloc(sizeof(linkstring); s-next=NULL; tc=s;/tc指向s串的最后一个结点 while(p!=NULL)/实现字符数组顺序赋值到串s q=(linkstring *)malloc(sizeof(linkstring); q-data=p-data; tc-next=q;/使得s中与tc同地址的nex

8、t指向q,使tc与q相连接 tc=q;/tc直接指向q p=p-next; tc-next=NULL; int strlength(linkstring *s)/求s的长度 int n=0; linkstring *p; p=s-next; while(p!=NULL) n+; p=p-next; return n;void dispstr(linkstring *s)/输出串s linkstring *p=s-next; while(p!=NULL) coutdata; p=p-next; coutnext;q=t-next; while(p!=NULL&q!=NULL) if(p-data

9、!=q-data) return 0; p=p-next; q=q-next; if(p!=NULL|q!=NULL) return 0; else return 1; linkstring *concat(linkstring *s,linkstring *t)/将t串连接到s串后 linkstring *p,*q,*tc,*r; r=(linkstring *)malloc(sizeof(linkstring); r-next=NULL; tc=r; p=s-next; while(p!=NULL) q=(linkstring *)malloc(sizeof(linkstring); q-

10、data=p-data; tc-next=q; tc=q; p=p-next; p=t-next; while(p!=NULL) q=(linkstring *)malloc(sizeof(linkstring); q-data=p-data; tc-next=q; tc=q; p=p-next; tc-next=NULL; return r;int index(linkstring *s,linkstring *t)/找到串t在串s中的位置 linkstring *p,*q,*p1; int i=0; p=s-next; while(p!=NULL) q=t-next;/q始终从头开始与p进

11、行比对 if(p-data=q-data) p1=p; while(p1!=NULL&q!=NULL&p1-data=q-data) p1=p1-next; q=q-next; if(q=NULL) return i; break; p=p-next; i+; return -1;int instr(linkstring *&s,int i,linkstring *t)/将t插入s串的第i个位置 linkstring *q=s-next,*p=s,*r; int k; r=(linkstring *)malloc(sizeof(linkstring); strcopy(r,t); /p=r;/

12、考虑到如果k=1的情况 r=r-next; /free(p); for(k=0;knext; p-next=r; while(r-next!=NULL) r=r-next; r-next=q; p=p-next; / s-next=p; return 1;int delstr(linkstring *&s,int i,int j)/删除串s 中从第i个位置开始的j个字符 int k; linkstring *p,*q;/ q=s; p=s-next; for(k=0;knext; for(k=0;knext; q-next=p; return 1; void repstr(linkstring

13、 *&s,linkstring *t,linkstring *r)/将s中出现的t替换成r int i; i=index(s,t); while(i=0) delstr(s,i,strlength(t); instr(s,i,r); i=index(s,t); void inputchuan(char str100,linkstring *&s)/输入字符串str并将字符串传递给指针串s cinstr;assign(s,str);void main() linkstring *s,*t,*r;/也可以先定义多个串指针实现书上说的“显示”“删除”两个功能; char str100,str1100

14、,str2100; int i,n; cout输入要执行操作的序号endl; cout1)赋值2)判相等3)连接4)求长度5)求子串6)子串定位7)串替换0)退出n; while(n!=0) switch(n) case 1: cout输入要赋值的串:endl; inputchuan(str,s); dispstr(s); break; case 2: cout输入要判定是否相等的两个串:endl; inputchuan(str1,s); inputchuan(str2,t); if(strequal(s,t)=1) coutequalendl; else coutunequalendl; b

15、reak; case 3: cout输入要连接的两个串:endl; inputchuan(str1,s); inputchuan(str2,t); r=concat(s,t); dispstr(r); coutendl; break; case 4: cout输入要求长度的串:endl; inputchuan(str,s); coutstrlength(s)endl; break; case 5: break; case 6: cout输入第一个串并输入要定位的串endl; inputchuan(str1,s); inputchuan(str2,t); n=index(s,t); if(n=-

16、1) cout找不到endl; else coutn+1endl; break; case 7: cout将第一个串中所有出现的第二个串用第三个串替代endl; inputchuan(str,s); inputchuan(str1,t); inputchuan(str2,r); repstr(s,t,r); dispstr(s); break; cout输入1-7继续,否则输入0退出n; 四、实验心得与小结1)熟悉串的定义和串的基本操作。2)掌握顺序串的基本运算。3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。4)运用到了串的链式存储结构,对链表也有了进一步提高。本次课程设计是对我

17、们这一学期来数据结构课程学习成果的一次实践检验,是对我们的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节,本次课程设计的的问题比平时的习题复杂的多,也更接近实际。是软件设计的综合训练,包括问题分析、总体结构分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。培养我们养成一整套软件工作规范的训练和科学作风的培养。 在这次课程设计的实践过程中,刚开始时候由于对问题的认识还不是很清楚和对c语言一些知识的遗忘,遇到问题解决不了。通过向老师和同学请教,还有自己重新复习了c语言那本书。然后又重新对问题进行分析,设计和调试。顺利的完成了程序设计要求的基本内容和要求,对自己的编程水平有了很大程度的提高。

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

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