




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 串的基本操作 一、实验目的、意义(1)理解串的堆分配存储结构。(2)理解用它们表示时插入,生成串,联接串与求子串的算法。(3)根据具体问题的需要,能够设计出相关算法。二、实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。具体要求:定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。3、 实验所涉及的知识点C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。四、实验结果及分析(所输入的数据
2、及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。六、程序清单(包含注释)#include <stdio.h>#include <malloc.h>#incl
3、ude <stdlib.h>typedef char Status;int strlen(char *p) int i=0; while(*p+)i+; return i;typedef structchar *ch;/ 若是非空串,则按串长分配存储区,否则ch为NULL int length; / 串长度 HString;/ 初始化(产生空串)字符串Tvoid InitString(HString *T)(*T).length=0;(*T).ch=NULL;/ 生成一个其值等于串常量chars的串T Status StrAssign(HString *T, char *chars
4、)int i,j;if(*T).ch)free(*T).ch); / 释放T原有空间 i = strlen(chars); / 求chars的长度i if(!i) / chars的长度为0 (*T).ch = NULL;(*T).length = 0;else/ chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char); / 分配串空间 if(!(*T).ch) / 分配串空间失败 exit(0);for(j = 0; j < i; j+) / 拷贝串 (*T).chj = charsj;(*T).length = i;return 1;/ 由
5、串S复制得串Tint StrCopy(HString *T,HString S)int i; if(*T).ch)free(*T).ch); / 释放T原有空间 (*T).ch=(char*)malloc(S.length*sizeof(char); / 分配串空间 if(!(*T).ch) / 分配串空间失败 exit(0);for(i=0;i<S.length;i+) / 拷贝串 (*T).chi=S.chi;(*T).length=S.length;return 1;/ 若S为空串,则返回1,否则返回0 int StrEmpty(HString S)if(S.length = 0
6、&& S.ch = NULL)return 1;elsereturn 0;/ 若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0int StrCompare(HString S,HString T)int i;for(i=0;i<S.length && i<T.length;+i)if(S.chi != T.chi)return S.chi-T.chi;return S.length-T.length;/ 返回S的元素个数,称为串的长度 int StrLength(HString S)return S.le
7、ngth;/ 将S清为空串 int ClearString(HString *S)if(*S).ch)free(*S).ch);(*S).ch=NULL;(*S).length=0;return 1;/ 用T返回由S1和S2联接而成的新串int Concat(HString *T,HString S1,HString S2)int i;if(*T).ch)free(*T).ch); / 释放旧空间 (*T).length=S1.length+S2.length;(*T).ch=(char *)malloc(*T).length*sizeof(char);/分配新串的长度if(!(*T).ch)
8、exit(0);for(i=0;i<S1.length;i+)/将S1接到新串T的后面(*T).chi=S1.chi;for(i=0;i<S2.length;i+)/将S2接到新串T的后面(*T).chS1.length+i=S2.chi;return 1;/ 用Sub返回串S的第pos个字符起长度为len的子串。int SubString(HString *Sub, HString S,int pos,int len)int i;if(pos<1|pos>S.length|len<0|len>S.length-pos+1)return 0;if(*Sub)
9、.ch)free(*Sub).ch); / 释放旧空间 if(!len) / 空子串 (*Sub).ch=NULL;(*Sub).length=0;else / 完整子串 (*Sub).ch=(char*)malloc(len*sizeof(char);if(!(*Sub).ch)exit(0);for(i=0;i<=len-1;i+)(*Sub).chi=S.chpos-1+i;(*Sub).length=len;return 1;/ 算法4.1 / T为非空串。若主串S中第pos个字符之后存在与T相等的子串, / 则返回第一个这样的子串在S中的位置,否则返回0 int Index(H
10、String S,HString T,int pos) int n,m,i;HString sub;InitString(&sub);if(pos>0)n=StrLength(S);m=StrLength(T);i=pos;while(i<=n-m+1)/从第i个位置开始求与T等长的子串,循环直到找到SubString(&sub,S,i,m);/从第i个位置开始求得子串if(StrCompare(sub,T)!=0)/将求得的子串与T对比,若不等则i+i;elsereturn i;return 0;/ 算法4.4/ 在串S的第pos个字符之前插入串Tsint Str
11、Insert(HString *S,int pos,HString T) int i;if(pos<1|pos>(*S).length+1) / pos不合法 return 0;if(T.length) / T非空,则重新分配空间,插入T (*S).ch = (char*)realloc(*S).ch, (*S).length+T.length)*sizeof(char);if(!(*S).ch)exit(0);for(i=(*S).length-1;i>=pos-1;-i) / 为插入T而腾出位置 (*S).chi+T.length=(*S).chi; for(i=0;i&
12、lt;T.length;i+)(*S).chpos-1+i=T.chi; / 插入T (*S).length+=T.length;return 1;/ 从串S中删除第pos个字符起长度为len的子串int StrDelete(HString *S,int pos,int len)int i;if(*S).length<pos+len-1)exit(0);for(i=pos-1;i<=(*S).length-len;i+)(*S).chi=(*S).chi+len;(*S).length-=len;(*S).ch=(char*)realloc(*S).ch,(*S).length*s
13、izeof(char);return 1;/ 用V替换主串S中出现的所有与T相等的不重叠的子串int Replace(HString *S,HString T,HString V)int i=1; / 从串S的第一个字符起查找串T if(StrEmpty(T) / T是空串 return 0;doi=Index(*S,T,i); / 结果i为从上一个i之后找到的子串T的位置 if(i) / 串S中存在串T StrDelete(S,i,StrLength(T); / 删除该串T StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V); / 在插入的串V后面
14、继续查找串T while(i);return 1;void DestroyString()/ 堆分配类型的字符串无法销毁 / 输出T字符串void StrPrint(HString T)int i;for(i=0;i<T.length;i+)printf("%c",T.chi);printf("n");int main()int i;char c,*p="God bye!",*q="God luck!"HString t,s,r;/ HString类型必需初始化InitString(&t); Init
15、String(&s);InitString(&r);StrAssign(&t,p);printf("串t为: ");StrPrint(t);printf("串长为%d 串空否?%d(1:空 0:否)n",StrLength(t),StrEmpty(t);StrAssign(&s,q);printf("串s为: ");StrPrint(s);i=StrCompare(s,t);if(i<0)c='<'else if(i=0)c='='elsec='>
16、;'printf("串s%c串tn",c);Concat(&r,t,s);printf("串t联接串s产生的串r为: ");StrPrint(r);StrAssign(&s,"oo");printf("串s为: ");StrPrint(s);StrAssign(&t,"o");printf("串t为: ");StrPrint(t);Replace(&r,t,s);printf("把串r中和串t相同的子串用串s代替后,串r为:n
17、");StrPrint(r);ClearString(&s);printf("串s清空后,串长为%d 空否?%d(1:空 0:否)n",StrLength(s),StrEmpty(s);SubString(&s,r,6,4);printf("串s为从串r的第6个字符起的4个字符,长度为%d 串s为: ",s.length);StrPrint(s);StrCopy(&t,r);printf("复制串t为串r,串t为: ");StrPrint(t);StrInsert(&t,6,s);printf("在串t的第6个字符前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园外语交流合作合同(2篇)
- 2025年是否可以随时解除委托合同
- A-V综合征的临床护理
- 新质生产力宣讲稿
- 新质生产力形式
- 眼部猪囊尾蚴病的临床护理
- 2025委托合同简单加工协议书格式
- 2025年社会工作者之中级社会综合能力模考模拟试题(全优)
- 腹直肌自发性破裂的临床护理
- 2025临时施工设施租赁合同范本
- GB/T 12604.4-2005无损检测术语声发射检测
- GB/T 1229-2006钢结构用高强度大六角螺母
- 多中心结直肠癌临床研究生物样本库信息系统的建设与管理
- 消防管道支架制作安装标准2017.喷淋
- 曲柄连杆机构拆装教学教材课件
- 年产量3000吨热处理车间的设计课程
- 合格供应商年度评审计划
- 培训考试汇总金属胶接工艺简介
- Q-RJ 557-2017 航天型号产品禁(限)用工艺目录(公开)
- ZGM95G-1型中速辊式磨煤机使用和维护说明书
- SZ系列GPS标准时间同步钟使用说明
评论
0/150
提交评论