首页 C++语言string类的实现(完整源代码).pdf

C++语言string类的实现(完整源代码).pdf

C++语言string类的实现(完整源代码).pdf

上传者: 永生换魂 2014-02-23 评分1 评论0 下载1 收藏0 阅读量734 暂无简介 简介 举报

简介:本文档为《C++语言string类的实现(完整源代码)pdf》,可适用于软件工程领域,主题内容包含MyString类完整源代码MyStringh文件*************************************************符等。

MyString类完整源代码MyStringh文件***********************************************************Copyright(c)道合|SameIdealcomAllrightsreserved************************************************************#ifndefMYSTRINGH#defineMYSTRINGH#include<iostream>usingnamespacestdclassMyString{public:构造函数MyString()MyString(constMyString)MyString(constchar*)MyString(constsizet,constchar)析构函数~MyString()属性sizetlength()字符串的长度boolempty()字符串是否为空constchar*cstr()返回C风格字符串的指针读写操作符friendostreamoperator<<(ostream,constMyString)friendistreamoperator>>(istream,MyString)‘’操作符friendMyStringoperator(constMyString,constMyString)比较操作符friendbooloperator==(constMyString,constMyString)friendbooloperator!=(constMyString,constMyString)friendbooloperator<(constMyString,constMyString)friendbooloperator<=(constMyString,constMyString)friendbooloperator>(constMyString,constMyString)friendbooloperator>=(constMyString,constMyString)下标操作符charoperator(constsizet)constcharoperator(constsizet)const赋值操作符MyStringoperator=(constMyString)'='操作符MyStringoperator=(constMyString)子串操作MyStringsubstr(sizet,sizet)添加操作MyStringappend(constMyString)插入操作MyStringinsert(sizet,constMyString)替换操作MyStringassign(constMyString,sizet,sizet)删除操作MyStringerase(sizet,sizet)private:sizetstrLengthchar*pstr}#endifMyStringcpp文件***********************************************************Copyright(c)道合|SameIdealcomAllrightsreserved************************************************************#include"MyStringh"#include<cassert>MyString::MyString():strLength(),pstr(){}MyString::MyString(constMyStringstr){strLength=strstrLengthpstr=newcharstrLengthstrcpy(pstr,strpstr)}MyString::MyString(constchar*str){if(str==)returnstrLength=strlen(str)pstr=newcharstrLengthstrcpy(pstr,str)}MyString::MyString(constsizetlen,constcharch){strLength=lenpstr=newcharstrLength*(pstrstrLength)=''strset(pstr,ch)}MyString::~MyString(){deletepstr}sizetMyString::length(){returnstrLength}boolMyString::empty(){returnstrLength==true:false}constchar*MyString::cstr(){returnpstr}输出操作符ostreamoperator<<(ostreamout,constMyStringstr){if(strpstr!=)out<<strpstrreturnout}输入操作符istreamoperator>>(istreamin,MyStringstr){chartemp临时字符串数组if(in>>temp){deletestrpstrstrstrLength=strlen(temp)strpstr=newcharstrstrLengthstrcpy(strpstr,temp)}returnin}下标操作符charMyString::operator(constsizetindex){assert(index>=index<=strLength)returnpstrindex}下标操作符(const情况)constcharMyString::operator(constsizetindex)const{assert(index>=index<=strLength)returnpstrindex}''操作符的重载MyStringoperator(constMyStringlhs,constMyStringrhs){MyStringretretstrLength=lhsstrLengthrhsstrLengthretpstr=newcharretstrLengthstrcpy(retpstr,lhspstr)strcat(retpstr,rhspstr)returnret}赋值操作符MyStringMyString::operator=(constMyStringstr){if(this!=str){if(strLength<strstrLength){deletepstrpstr=newcharstrstrLength}strLength=strstrLengthstrcpy(pstr,strpstr)}return*this}'='操作符MyStringMyString::operator=(constMyStringstr){if(this==str){MyStringcopy(str)return*this=copy}strLength=strstrLengthchar*pold=pstrpstr=newcharstrLengthstrcpy(pstr,pold)deletepoldstrcat(pstr,strpstr)return*this}比较操作符booloperator==(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)==}booloperator!=(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)!=}booloperator<(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)<}booloperator<=(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)<=}booloperator>(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)>}booloperator>=(constMyStringlhs,constMyStringrhs){returnstrcmp(lhspstr,rhspstr)>=}子串操作返回一个MyString类型的字符串它包含源字符串中从下标pos开始的n个字符MyStringMyString::substr(sizetpos,sizetn){assert(posn<=strLength)MyStringretretstrLength=nretpstr=newcharretstrLengthfor(sizeti=i!=ni)reti=(*this)posiretn=''returnret}添加操作将一个字符串的副本添加到源字符串的末尾同“=”操作符类似MyStringMyString::append(constMyStringstr){*this=strreturn*this}插入操作在下标为pos的元素之前插入MyString对象str的副本MyStringMyString::insert(sizetpos,constMyStringstr){assert(pos<strLength)char*pold=pstrstrLength=strstrLengthpstr=newcharstrLengthfor(sizeti=i!=posi)*(pstri)=*(poldi)for(sizeti=posi!=strstrLengthposi)*(pstri)=*(strpstripos)for(sizeti=strstrLengthposi!=strLengthi)*(pstri)=*(poldistrstrLength)*(pstrstrLength)=''deletepoldreturn*this}替换操作用s中从下标pos开始的len个字符副本替换源字符串MyStringMyString::assign(constMyStrings,sizetpos,sizetlen){if(strLength<len){strLength=lendeletepstrpstr=newcharstrLength}for(sizeti=i!=leni)*(pstri)=sposi*(pstrstrLength)=''return*this}删除操作删除从下标pos开始的len个字符MyStringMyString::erase(sizetpos,sizetlen){assert(poslen<=strLength)sizetindex=poslenwhile(*(pstrindex)!=''){*(pstrindexlen)=*(pstrindex)index}*(pstrindexlen)=''return*this}本文首次发表在道合|sameidealcom欢迎大家访问我的独立技术博客~

职业精品

职场礼仪培训PPT(职场必备).ppt

职场礼仪小常识.doc

品牌策略分析.doc

苹果公司产品、价格、品牌策略.ppt

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 7
所需积分:1 立即下载

意见
反馈

返回
顶部