




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上串的基本操作演示实验报告 学号: 姓名: 班级:专心-专注-专业1 实验环境问题描述: 如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试实现串类型,并写一个串的基本操作的演示系统。 基本要求: 在教科书4.2.2节用堆分配存储表示实现HString串的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数)。参数合法性检查必须严格。 说明:(在格式中,表示0个、1个或多个空格所组成的串。串标识表示一个内部名或一个串文字。前者是一个串的唯一标识,是一种内部形式的(而不是
2、字符形式的)标识符。后者是两端由单引号括起来的仅可打印字符组成的序列。串内每两个连续的单引号表示一个单引号符。) 利用上述基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下: (1) 赋值。格式:A串标识回车 用串标识所表示的值建立新串,并显示新串的内部名和串值。如:AHi! (2) 判相等。 格式:E串标识1串标识2回车 若两串相等,则显示“EQUAL”,否则显示“UNEQUAL”。 (3) 联接。 格式:C串标识1串标识2回车 将两串联接产生结果串,它的内部名和串值都显示出来。 (4) 求长度 格式:L串标识回车 显示串
3、的长度。 (5) 求子串 格式:S串标识+数1+数2回车 如果参数合法,则显示子串的内部名和串值。数不带正负号。 (6)子串定位。 格式:I串标识1串标识2回车 显示第二个串在第一个串中首次出现时的位置。 (7)串替换 格式:R串标识1串标识2串标识2回车 将第一个串中出现所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。 (0)退出 格式:Q回车 结束程序的运行。 二、实验内容编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。具体如下:编写栈的基本操作函数顺序串类型定义如下所示:typedef struct nodechar data;struct no
4、de *next;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<stdio.h>#include<iostream.h>#i
6、nclude<stdlib.h>typedef struct nodechar data;struct node *next;linkstring;void assign(linkstring *&s,char t)/将字符串t赋值给指针串s,并返回sint i=0;linkstring *q,*tc;s=(linkstring *)malloc(sizeof(linkstring);s->next=NULL;tc=s;/tc指向s串的最后一个结点while(ti!='0')/实现字符数组顺序赋值到串sq=(linkstring *)malloc(si
7、zeof(linkstring);q->data=ti;tc->next=q;/使得s中与tc同地址的next指向q,使tc与q相连接tc=q;/tc直接指向qi+;tc->next=NULL;void strcopy(linkstring *&s,linkstring *t)/将t串赋值给s串并返回slinkstring *p=t->next,*q,*tc;s=(linkstring *)malloc(sizeof(linkstring);s->next=NULL;tc=s;/tc指向s串的最后一个结点while(p!=NULL)/实现字符数组顺序赋值到
8、串sq=(linkstring *)malloc(sizeof(linkstring);q->data=p->data;tc->next=q;/使得s中与tc同地址的next指向q,使tc与q相连接tc=q;/tc直接指向qp=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)/输出串slinkstrin
9、g *p=s->next;while(p!=NULL)cout<<p->data;p=p->next;cout<<endl;int strequal(linkstring *s,linkstring *t)/判断s串和t串是否相等linkstring *p,*q;p=s->next;q=t->next;while(p!=NULL&&q!=NULL)if(p->data!=q->data)return 0;p=p->next;q=q->next;if(p!=NULL|q!=NULL)return 0;e
10、lsereturn 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->data=p->data;tc->next=q;tc=q;p=p->next;p=t->next;while(p!
11、=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进行比对if(p->data=q->data) p1=p;while(p1
12、!=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;/考虑到
13、如果k=1的情况r=r->next;/free(p);for(k=0;k<i;k+)if(q=NULL)return 0;p=q;q=q->next;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;k<i;
14、k+)/先找到第i个结点,让q指向第i个结点,让p指向第i+1个结点if(p=NULL)return 0;q=p;p=p->next;for(k=0;k<j;k+)if(p=NULL)return 0;p=p->next;q->next=p;return 1;void repstr(linkstring *&s,linkstring *t,linkstring *r)/将s中出现的t替换成rint i;i=index(s,t);while(i>=0)delstr(s,i,strlength(t);instr(s,i,r);i=index(s,t);void
15、 inputchuan(char str100,linkstring *&s)/输入字符串str并将字符串传递给指针串scin>>str;assign(s,str);void main()linkstring *s,*t,*r;/也可以先定义多个串指针实现书上说的“显示”“删除”两个功能;char str100,str1100,str2100;int i,n;cout<<"输入要执行操作的序号"<<endl;cout<<"1)赋值2)判相等3)连接4)求长度5)求子串6)子串定位7)串替换0)退出"
16、<<endl;cin>>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)cout<<"equal"<<endl;elsecout&l
17、t;<"unequal"<<endl;break;case 3:cout<<"输入要连接的两个串:"<<endl;inputchuan(str1,s);inputchuan(str2,t);r=concat(s,t);dispstr(r);cout<<endl;break;case 4:cout<<"输入要求长度的串:"<<endl;inputchuan(str,s);cout<<strlength(s)<<endl;break;ca
18、se 5:break;case 6:cout<<"输入第一个串并输入要定位的串"<<endl;inputchuan(str1,s);inputchuan(str2,t);n=index(s,t);if(n=-1)cout<<"找不到"<<endl;elsecout<<n+1<<endl;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退出"<<endl;cin>>n;4、 实验心得与小结1)熟悉串的定义和串的基本操作。2)掌握顺序串的基本运算。3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。4)运用到了串的链式存储结构,对链表也有了进一步提高。本次课程设计是对我们这一学期来数据结构课程学习成果的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提升化妆品品牌的知名度计划
- 2024年小金县招聘事业单位人才笔试真题
- 软件设计师2025年考试必知试题及答案
- 计算机二级VB考试历年试题及答案分析
- 2024年温州平阳县委党校引进人才笔试真题
- 专注提升2025年法学概论考试试题及答案
- 软件技术员考前模拟试题及答案
- 重庆市南开(融侨)中学2025届八年级数学第二学期期末调研模拟试题含解析
- 高考数学阶段性复习试题及答案
- 领导电子商务品牌的发展计划
- 混凝土罐车运输合同协议
- 西部计划笔试试题及答案
- 重庆金太阳2025届高三5月联考英语及答案
- 护理事业编试题及答案
- 全国新能源汽车关键技术技能大赛理论知识竞赛题库
- 外籍人员雇佣合同(中英文对照)6篇
- 《不可或缺的医疗保障:课件中的健康险》
- 财产申报表-被执行人用
- 委托聘请演员合同协议
- 水库防汛知识培训
- 2025年贵州省遵义市中考一模英语试题(含笔试答案无听力原文及音频)
评论
0/150
提交评论