欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:35306091       资源大小:63KB        全文页数:8页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    - 串的基本操作 一、实验目的、意义(1)理解串的堆分配存储结构。(2)理解用它们表示时插入,生成串,联接串与求子串的算法。(3)根据具体问题的需要,能够设计出相关算法。二、实验内容及要求说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。具体要求:定义串的堆分配存储,完成串的基本操作:插入,生成串,联接串,求子串等。三、 实验所涉及的知识点C语言算法、循环算法、串的堆分配存储结构、插入,生成串,联接串与求子串的算法。四、实验结果及分析(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。) 五、总结与体会(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)调试程序时,出现了许多错误。如:串的堆分配存储结构、串的联接等。另外还有一些语法上的错误。由于对所学知识点概念模糊,试验课上未能完成此次上机作业。后来经过查阅教材,浏览网页等方式,才完成试验。这次试验出现错误最重要的原因就是对课本知识点理解不深刻以及编写代码时的粗心。以后要都去练习、实践,以完善自己的不足。六、程序清单(包含注释)#include <stdio.h>#include <malloc.h>#include <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)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;/ 由串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 && 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.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 *)malloc(*T).length*sizeof(char);/分配新串的长度if(!(*T).ch)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).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(HString 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 StrInsert(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<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*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 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;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); 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(i<0)c='<'else if(i=0)c='='elsec='>'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");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;-第 8 页-

    注意事项

    本文(串的基本操作(8页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开