串的基本操作.docx_第1页
串的基本操作.docx_第2页
串的基本操作.docx_第3页
串的基本操作.docx_第4页
串的基本操作.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#include#includetypedef structchar *str;int length;HString;/堆串/初始化void InitString(HString &S)S.str =0;S.length =0; /堆串赋值 void StrAssign(HString &S,char *chars) int i,len; char *p; p=chars; if(S.str) free(S.str); for(i=0;pi!=0;i+) len=i+1; if(!i) S.length =0; S.str =0; elseS.str=(char *)malloc(len*sizeof(char);if(!S.str ) exit(-1);for(i=0;ilen;i+) S.stri=pi;S.length =len; /判断堆串是否为空 int StrEmpty(HString S) if(S.length =0) return 1; else return 0; /求堆串长度 int StrLength(HString S) return S.length ; /串的复制操作 int StrCopy(HString &T,HString S) /*将串S复制给串T*/ int i; T.str =(char *)malloc(S.length*sizeof(char); if(!T.str) return 0; for(i=0;iS.length;i+) T.stri=S.stri; T.length=S.length; return 1; /串的比较操作int StrCompare(HString S,HString T)/*比较串S与串T的大小,如果S的值大于T,返回正值;如果S的值小于T,返回负值;如果相等,返回0*/int i;for(i=0;iS.length&iT.length;i+) if(S.stri!=T.stri) return (S.stri-T.stri);return (S.length-T.length ); /串的插入操作 int StrInsert(HString &S,int pos,HString T) /*在S中第pos个位置插入T*/ int i; if(posS.length) printf(插入位置错误n); return 0; S.str=(char *)realloc(S.str,(S.length+T.length)*sizeof(char);if(!S.str)printf(内存分配失败n);return 0;for(i=S.length-1;ipos-1;i-) S.stri+T.length=S.stri;for(i=0;iT.length;i+) S.strpos+i-1=T.stri;S.length=S.length+T.length;return 1; /串的删除操作 int StrDelete(HString &S,int pos,int len) /*在S中删除pos开始的len个字符*/ int i; char *p; if(posS.length) printf(删除位置错误,参数len不合法n); return 0; p=(char *)malloc(S.length-len);if(!p)printf(内存分配失败n);return 0; for(i=0;ipos-1;i+) pi=S.stri;for(i=pos-1;iS.length-len;i+) pi=S.stri+len;S.length=S.length-len;free(S.str);S.str=p;return 1; /串的连接操作int StrConcat(HString &T,HString S)/*将串S连接在T后*/int i;T.str=(char *)realloc(T.str,(T.length+S.length)*sizeof(char) ;if(!T.str)printf(内存分配失败n);return 0; elsefor(i=T.length;iT.length +S.length ;i+) T.stri=S.stri-T.length;T.length =T.length +S.length ;return 1; /截取子串操作 int SubString(HString &Sub,HString S,int pos,int len) /*将从S中第pos个位置截取长度为len的子串赋值给Sub*/ int i; if(Sub.str ) free(Sub.str ); if(pos0|lenS.length ) printf(参数len和pos不合法n); return 0; elseSub.str =(char *)malloc(len*sizeof(char);if(!Sub.str)printf(内存分配失败n);return 0;for(i=0;ilen;i+)Sub.stri=S.strpos+1-1;Sub.length =len;return 1; /串的定位操作 int StrIndex(HString S,int pos,HString T) /*在主串S中的第pos个位置开始查找子串T,如果找到,返回子串在主串中的位置;否则,返回-1*/ int i,j; if(StrEmpty(T) printf(子串为空n); return 0;i=pos-1;j=0;while(iS.length&j=T.length) return i-j+1;else return -1; /串的替换操作 int StrReplace(HString &S,HString T,HString V) /*将串S中的所有子串T用V替换*/ int i=1; int flag; if(StrEmpty(T) printf(子串为空n); return 0; doi=StrIndex(S,i,T);if(i)StrDelete(S,i,StrLength(T);flag=StrInsert(S,i,V);if(!flag)printf(插入失败n);return 0;i+=StrLength(V);while(i);return 1; /串的清空操作 void StrClear(HString &S) if(S.str ) free(S.str); S.str=0; S.length=0; /输出串void Strprint(HString S) int i;for(i=0;i0) printf(串S大于串Tn); else if(StrCompare(S,T)0) printf(串S小于串Tn); else printf(串S与串T相等n) ; break;case 9:printf(在S中第pos个位置插入Tn); printf(请输入pos:); scanf(%d,&pos); printf(请输入T:); scanf(%s,s); InitString(T); StrAssign(T,s); if(StrInsert(S,pos,T) printf(插入成功n); break;case 10:printf(在S中删除pos开始的len个字符n); printf(请输入pos:); scanf(%d,&pos); printf(请输入len:); scanf(%d,&len); if(StrDelete(S,pos,len) printf(删除成功n); break;case 11:printf(将串T连接在S后n); printf(请输入T:); scanf(%s,s); InitString(T); StrAssign(T,s); if(StrConcat(S,T) printf(连接成功n); break;case 12:printf(将从S中第pos个位置截取长度为len的子串赋值给Subn); printf(请输入pos:); scanf(%d,&pos); printf(请输入len:); scanf(%d,&len); InitString(Sub); if(SubString(Sub,S,pos,len) printf(截取成功n); Strprint(Sub); break;case 13:printf(将串S中所有子串T用串V替换n); printf(请输入T:); scanf(%s,s); InitString(T); StrAssign(T,s); printf(请输入V:); scanf(%s,s); InitString(V); StrAssign(V,s); if(StrReplace(S,T,V) printf(替换成功n); break;case 14:printf(在主串S中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论