串的基本操作(共8页).doc

上传人:飞****2 文档编号:13867603 上传时间:2022-05-01 格式:DOC 页数:8 大小:62KB
返回 下载 相关 举报
串的基本操作(共8页).doc_第1页
第1页 / 共8页
串的基本操作(共8页).doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《串的基本操作(共8页).doc》由会员分享,可在线阅读,更多相关《串的基本操作(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上 串的基本操作 一、实验目的、意义(1)理解串的堆分配存储结构。(2)理解用它们表示时插入,生成串,联接串与求子串的算法。(3)根据具体问题的需要,能够设计出相关算法。二、实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。具体要求:定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。三、 实验所涉及的知识点C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。四、实

2、验结果及分析(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。六、程序清单(包含注释)#include #include #include typedef char S

3、tatus;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)int i,j;if(*T).ch)free(*T).ch); /

4、 释放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;/ 由串S复制得串Tint StrCopy(HString *T,HString S

5、)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;iT,则返回值0;若S=T,则返回值=0;若ST,则返回值0int StrCompare(HString S,HString T)int i;for(i=0;iS.length & iT.length;+i)if(S.chi != T.chi)return S.chi-T.chi;return S.length-T.length;

6、/ 返回S的元素个数,称为串的长度 int StrLength(HString S)return S.length;/ 将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

7、*)malloc(*T).length*sizeof(char);/分配新串的长度if(!(*T).ch)exit(0);for(i=0;iS1.length;i+)/将S1接到新串T的后面(*T).chi=S1.chi;for(i=0;iS2.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(posS.length|lenS.length-pos+

8、1)return 0;if(*Sub).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;i0)n=StrLength(S);m=StrLength(T);i=pos;while(i=n-m+1)/从第i个位置开始求与T等长的子串,循环直到找到SubString(&sub,S,i,m);/从第i个位置开始求得子串if(StrCompar

9、e(sub,T)!=0)/将求得的子串与T对比,若不等则i+i;elsereturn i;return 0;/ 算法4.4/ 在串S的第pos个字符之前插入串Tsint StrInsert(HString *S,int pos,HString T) int i;if(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).

10、length-1;i=pos-1;-i) / 为插入T而腾出位置 (*S).chi+T.length=(*S).chi; for(i=0;iT.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).lengthpos+len-1)exit(0);for(i=pos-1;i=(*S).length-len;i+)(*S).chi=(*S).chi+len;(

11、*S).length-=len;(*S).ch=(char*)realloc(*S).ch,(*S).length*sizeof(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

12、StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V); / 在插入的串V后面继续查找串T while(i);return 1;void DestroyString()/ 堆分配类型的字符串无法销毁 / 输出T字符串void StrPrint(HString T)int i;for(i=0;iT.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);

13、InitString(&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(i0)c=;printf(串s%c串tn,c);Concat(&r,t,s);printf(串t联接串s产生的串r为: );StrPrint(r);StrAssign(&s,oo);printf(串s为: );StrPr

14、int(s);StrAssign(&t,o);printf(串t为: );StrPrint(t);Replace(&r,t,s);printf(把串r中和串t相同的子串用串s代替后,串r为:n);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个字符前插入串s后,串t为: );StrPrint(t);StrDelete(&t,1,5);printf(从串t的第1个字符起删除5个字符后,串t为: );StrPrint(t);printf(%d是从串t的第1个字符起,和串s相同的第1个子串的位置n,Index(t,s,1);printf(%d是从串t的第2个字符起,和串s相同的第1个子串的位置n,Index(t,s,2);system(pause);return 0;专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁