字符串的操作

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

上机实习报告实验题目:实现字符串的操作基本要求:(1)字符串采用动态数组存储,建立两个字符串String1和String2,输出两个字符串(2)将字符串String2的头n个字符添加到String1的尾部,输出结果(3)查找串String3在String1中的位置,若String3在String1中不存在,则插入String3在String1中的m位置上,输出结果测试数据:(1)string1:”typedefstructArcBox”String2:”VertexTypedata”String3:”data”(2)String1:”structArcBox”String2:”VertexType”String3:”Box”算法思想:1用动态数组存储,建立两个字符串String1和String2,输出两个字符串。2将字符串String2的头n个字符添加到String1的尾部,输出结果3查找串String3在String1中的位置,若String3在String1中不存在,则插入String3在String1中的m位置上,输出结果模块划分:(1)voidInitiate(DString*S,intmax,char*string)的作用是:初始化字符串S,将string的字符复制到S中;(2)intInsert(DString*S,intpos,DStringT)的作用是:在主串的pos位置插入子串T;(3)intDelete(DString*S,intpos,intlen)函数的功能是:删除主串s从pos位置开始的长度为len的子串,删除成功则返回1,失败则返回0(4)intSubString(DString*S,intpos,intlen,DString*T)取主串S从pos位置开始的长度为len的字串,取成功返回1,失败返回0;(5)voidDestroy(DString*S)的函数的功能是:撤销串S所占的空间(6)voidBFIndex(DStringS,intstart,DStringT)函数的功能是:查找子串S从start开始的子串T数据结构:typedefstruct{char*str;intmaxLength;intlength;}DString;实验程序:头文件:typedefstruct{char*str;intmaxLength;intlength;}DString;voidInitiate(DString*S,intmax,char*string){inti;S-str=(char*)malloc(sizeof(char)*max);S-maxLength=max;S-length=strlen(string);for(i=0;iS-length;i++)S-str[i]=string[i];}intInsert(DString*S,intpos,DStringT){inti;if(pos0){printf(参数pos出错!);return0;}else{//重新申请S-str所指数组空间,原数组元素存放在新数组的前面if(S-length+T.lengthS-maxLength)realloc(S-str,(S-length+T.length)*sizeof(char));S-maxLength=S-length+T.length;for(i=S-length-1;i=pos;i--)S-str[i+T.length]=S-str[i];//依次后移T.length个位置for(i=0;iT.length;i++)S-str[pos+i]=T.str[i];//插入字串S-length=S-length+T.length;//改变S的数据元素个数return1;}}//删除主串s从pos位置开始的长度为len的子串,删除成功则返回1,失败则返回0intDelete(DString*S,intpos,intlen){inti;if(S-length=0){printf(数组中未存放字符无元素可删!\n);return0;}elseif(pos0||len0||pos+lenS-length){printf(参数pos和len不合法);return0;}else{for(i=pos+len;i=S-length-1;i++)S-str[i-len]=S-str[i];//依次前移len个位置S-length=S-length-len;//重置数据元素个数return1;}}//取主串S从pos位置开始的长度为len的字串,取成功返回1,失败返回0intSubString(DString*S,intpos,intlen,DString*T){inti;if(pos0||len0||pos+lenS-length){printf(参数pos和len出错!);return0;}if(lenT-maxLength){T-str=(char*)malloc(len*sizeof(char));T-maxLength=len;}for(i=0;ilen;i++)T-str[i]=S-str[pos+i];T-length=len;return1;}voidDestroy(DString*S){free(S-str);S-maxLength=0;S-length=0;}voidBFIndex(DStringS,intstart,DStringT){inti=start,j=0,v;while(iS.length&&jT.length){if(S.str[i]==T.str[j]){i++;j++;}else{i=i-j+1;j=0;}}if(j==T.length){v=i-T.length;printf(串String3在String1中的%d位置,v);}else{printf(串String3在String1中不存在!\n);Insert(&S,S.length,T);for(i=0;iS.length;i++)printf(%c,S.str[i]);printf(\n);}}主函数测试:#includestdio.h#includemalloc.h#includestring.h#includehead.hvoidmain(){DStringmystring1,mystring2,mystring3,mystring4;inti,max1=19,max2=14,max3=3,max4=0;//初始化Initiate(&mystring1,max1,typedefstructArcBox);Initiate(&mystring2,max2,VertexTypedata);Initiate(&mystring3,max3,data);Initiate(&mystring4,max4,);//建立两个字符串String1和String2,输出两个字符串printf(字符串mystring1是:);for(i=0;imystring1.length;i++)printf(%c,mystring1.str[i]);printf(\n);//输出第二个字符串printf(字符串mystring2是:);for(i=0;imystring2.length;i++)printf(%c,mystring2.str[i]);printf(\n);//将字符串String2的头5个字符添加到String1的尾部,输出结果SubString(&mystring2,0,5,&mystring4);Insert(&mystring1,mystring1.length,mystring4);//查找串String3在String1中的位置,若String3在String1中不存在,//则插入String3在String1中的m位置上,输出结果for(i=0;imystring1.length;i++)printf(%c,mystring1.str[i]);printf(\n);BFIndex(mystring1,0,mystring3);printf(\n);printf(\n);printf(\n);printf(\n);max1=12,max2=10,max3=3,max4=0;//初始化Initiate(&mystring1,max1,structArcBox);Initiate(&mystring2,max2,VertexType);Initiate(&mystring3,max3,Box);Initiate(&mystring4,max4,);//建立两个字符串String1和String2,输出两个字符串printf(字符串mystring1是:);for(i=0;imystring1.length;i++)printf(%c,mystring1.str[i]);printf(\n);//输出第二个字符串printf(字符串mystring2是:);for(i=0;imystring2.length;i++)printf(%c,mystring2.str[i]);printf(\n);//将字符串String2的头5个字符添加到String1的尾部,输出结果SubString(&mystring2,0,5,&mystring4);Insert(&mystring1,mystring1.length,mystring4);//查找串String3在String1中的位置,若String3在String1中不存在,//则插入String3在String1中的m位置上,输出结果for(i=0;imystring1.length;i++)printf(%c,mystring1.str[i]);printf(\n);BFIndex(mystring1,0,mystring3);printf(\n);Destroy(&mystring4);}测试情况:(1)程序运行输出为:(2)测试结果分析:程序运行结果和人工模拟分析过程完全相同,说明程序设计正确;

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功