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





