数据结构串操作源代码.docx
- 文档编号:30669267
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:15
- 大小:17.38KB
数据结构串操作源代码.docx
《数据结构串操作源代码.docx》由会员分享,可在线阅读,更多相关《数据结构串操作源代码.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构串操作源代码
数据结构串的操作
1.头文件:
//串类的定义
classAString
{
private:
char*ch;//串存放数组
intcurLength;//串的实际长度
intmaxSize;//存放数组的最大长度.
voidCheckMem();//检测内存是否申请成功
public:
AString();
AString(intsz);//构造函数,构造一个最大长度为sz,实际长度为0的字符串
AString(constchar*init);//构造函数,构造一个最大长度为maxSize,由init初始化的新字符串对象
AString(constAString&ob);//复制构造函数,由一个已有的字符串对象ob构造一个新字符串
~AString(){delete[]ch;}//析构函数,释放动态分配的串空间并撤销该字符串对象
//与字符串对象的比较运算
intoperator==(AString&ob)const{returnstrcmp(ch,ob.ch)==0;}//判断当前实例是否与ob串相等,若相等则返回1,否则返回0
intoperator!
=(AString&ob)const{returnstrcmp(ch,ob.ch)!
=0;}//判断当前实例是否与ob串不等,若不等则返回1,否则返回0
intoperator<(AString&ob)const{returnstrcmp(ch,ob.ch)<0;}//判断当前实例串是否小于ob串,若小于则返回1,否则为0
intoperator>(AString&ob)const{returnstrcmp(ch,ob.ch)>0;}//判断当前实例串是否大于ob串,若小于则返回1,否则为0
intoperator<=(AString&ob)const{returnstrcmp(ch,ob.ch)<=0;}//判断当前实例串是否小于等于ob串,若小于等于则返回1,否则为0
intoperator>=(AString&ob)const{returnstrcmp(ch,ob.ch)>=0;}//判断当前实例串是否大于等于ob串,若大于等于则返回1,否则为0
//与字符串的比较运算
intoperator==(char*str)const{returnstrcmp(ch,str)==0;}//判断当前实例是否与C++串相等,若相等则返回1,否则返回0
intoperator!
=(char*str)const{returnstrcmp(ch,str)!
=0;}//判断当前实例是否与C++串不相等,若不等则返回1,否则返回0
intoperator<(char*str)const{returnstrcmp(ch,str)<0;}//判断当前实例是否与小于C++串,若小于则返回1,否则返回0
intoperator>(char*str)const{returnstrcmp(ch,str)>0;}//判断当前实例是否与大于C++串,若小于则返回1,否则返回0
intoperator<=(char*str)const{returnstrcmp(ch,str)<=0;}//判断当前实例是否与小于等于C++串,若小于等于则返回1,否则返回0
intoperator>=(char*str)const{returnstrcmp(ch,str)>=0;}//判断当前实例是否与大于等于C++串,若大于等于则返回1,否则返回0
AString&operator=(AString&ob);//将串ob赋值给当前实例.
AString&operator=(constchar*str);//将字符串赋值给字符串对象
AString&operator+=(AString&ob);//若当前实例串长度与ob串长度之和不超过maxSize则把ob串接在当前实例的后面.
AString&operator+=(constchar*str);//若当前实例串长度与str串长度之和不超过maxSize,则把str串接到串对象后面.
char&operator[](inti);//取当前实例的第i个字符返回.
boolIsEmpty()const{returncurLength==0;}//判空函数
intLength()const{returncurLength;}//返回当前实例的实际字符长度.
//下面主要是常用函数的重载等等,方便各种调用方法
voidSubString(AString&subs,intindex,intlength);//从索引index开始截取length长度的字符串返回.
AString&Remove(intstartIndex,intlength);//以索引startIndex开始删除length个字符
AString&Insert(intpos,constchar*value);
voidClear();//清空当前字符串对象
voidOutput();//输出
};
//串类的实现
voidAString:
:
CheckMem()
{
if(ch==NULL)
{
cerr<<"内存分配失败!
\n";
exit
(1);
}
}
AString:
:
AString()
{
maxSize=defaultSize;
curLength=0;
ch=newchar[maxSize];
CheckMem();
ch[0]='\0';
}
AString:
:
AString(intsz)
{//串构造函数
maxSize=sz;
ch=newchar[maxSize+1];
CheckMem();
curLength=0;
ch[0]='\0';
}
AString:
:
AString(constchar*init)
{//串构造函数
intinitLength=strlen(init);
maxSize=(initLength>defaultSize)?
initLength:
defaultSize;
ch=newchar[maxSize+1];
CheckMem();
curLength=initLength;
strcpy(ch,init);
}
AString:
:
AString(constAString&ob)
{//串对象复制构造函数
maxSize=ob.maxSize;
ch=newchar[maxSize+1];
CheckMem();
strcpy(ch,ob.ch);
curLength=ob.curLength;
}
AString&AString:
:
operator=(AString&ob)
{
if(&ob!
=this)//若两个串相等为自我赋值
{
Clear();
curLength=ob.curLength;
strcpy(ch,ob.ch);
}
else
cout<<"字符串自身赋值出错!
\n";
return*this;
}
AString&AString:
:
operator=(constchar*str)
{//字符串赋值
intstrLength=strlen(str);
maxSize=strLength>maxSize?
strLength:
maxSize;
Clear();
strcpy(ch,str);
curLength=strLength;
return*this;
}
AString&AString:
:
operator+=(AString&ob)
{//字符串对象连接
char*tempCH=ch;
char*tempOb=ob.ch;
intaddLength=curLength+strlen(tempOb);
maxSize=maxSize>addLength?
maxSize:
addLength;
char*temp=newchar[maxSize+1];
char*tempT=temp;
while(*tempCH!
='\0')
*tempT++=*tempCH++;
while(*tempOb!
='\0')
*tempT++=*tempOb++;
*tempT++='\0';
Clear();
strcpy(ch,temp);
curLength=strlen(ch);
delete[]temp;
return*this;
}
AString&AString:
:
operator+=(constchar*str)
{//字符串连接到字符串对象
char*tempCH=ch;
intaddLength=curLength+strlen(str);
maxSize=maxSize>addLength?
maxSize:
addLength;
char*temp=newchar[maxSize+1];
char*tempT=temp;
while(*tempCH!
='\0')
*tempT++=*tempCH++;
while(*str!
='\0')
*tempT++=*str++;
*tempT++='\0';
Clear();
strcpy(ch,temp);
curLength=strlen(ch);
delete[]temp;
return*this;
}
char&AString:
:
operator[](inti)
{//读取索引位置上的字符
if(i<0||i>curLength)
{
cerr<<"字符下标越界\n";
exit
(1);
}
returnch[i];
}
voidAString:
:
SubString(AString&subs,intindex,intlength)
{
if(index<0||index+length>maxSize||length<0)
{
cerr<<"或索引或者长度越界\n";
exit
(1);
}
if(IsEmpty())
cerr<<"字符串对象为空\n",exit
(1);
else
{
char*temp=newchar[length+1];
if(temp==NULL)
{
cerr<<"内存分配错误!
\n";
exit
(1);
}
for(inti=0,j=index;i { temp[i]=ch[j]; } temp[length]='\0'; subs=temp; } } AString&AString: : Remove(intstartIndex,intlength) { if(startIndex<0||startIndex+length>maxSize||length<0) { cerr<<"索引或长度越界\n"; exit (1); } if(IsEmpty()) cerr<<"字符串对象为空\n",exit (1); for(inti=0;i { ch[i+startIndex]=ch[i+length+startIndex]; } ch[curLength-length]='\0'; curLength=strlen(ch); return*this; } AString&AString: : Insert(intpos,constchar*value) { if(pos>curLength||pos<0) { cerr<<"试图插入的位置越界\n"; exit (1); } intaddLength=strlen(value)+curLength; maxSize=addLength>maxSize? addLength: maxSize; char*temp=newchar[maxSize+1]; char*tempCH=ch; char*tempH=temp; for(inti=0;i *temp++=*tempCH++;//先将当前对象中插入位置之前的字符复制到tempH指向的内存中 while(*value! ='\0') *temp++=*value++;//再将待插入的字符串连接到tempH指向的内存中 while(*tempCH! ='\0') *temp++=*tempCH++;//最后将当前对象插入位置之后的字符连接到tempH指向的内存中 *temp='\0'; Clear();//清空当前对象 strcpy(ch,tempH);//将拼接好的字符串复制到实例中 curLength=strlen(ch); return*this; } voidAString: : Clear() { delete[]ch; ch=newchar[maxSize+1]; CheckMem();//释放内存并重新申请 ch[0]='\0';//将串对象置为空 curLength=0; } voidAString: : Output() { if(IsEmpty()) cerr<<"字符串对象为空"< else cout< } 2.主程序: #include #include"stdio.h"//EOF,NULL #include constintdefaultSize=128; usingnamespacestd; #include"AString.h" intmain() { cout<<"------------------------------------------------------------------------"< cout<<"请输入初始化对象的大小: "; intlen; cin>>len; char*str=newchar[len+1]; cout<<"\n请输入要初始化字符串(不能含有空格): "; cin>>str; AStringstring(len); string=str; inttag=0; while (1) { cout<<"1-删除操作\n" <<"2-插入操作\n" <<"3-连接操作\n" <<"4-截取字符串\n" <<"5-字符比较\n" <<"6-输出字符串对象\n" <<"7-清空字符对象(清空后可选择序号8来重新赋值)\n" <<"8-字符串对象赋值\n" <<"9-退出程序\n"; cout<<"\n请输入要操作的方法的序号: "; cin>>tag; switch(tag) { case1: {intindex,length; cout<<"请输入要删除的起始位置: "; cin>>index; cout<<"\n请输入要删除的长度: "; cin>>length; string.Remove(index,length); cout<<"\n删除后的字符串: "< string.Output(); break;} case2: {intindex; char*input=newchar[defaultSize]; cout<<"\n请输入要插入的字符串: "; cin>>input; //cout<<"输入的串长为: "< cout<<"\n请输入要插入的位置: "; cin>>index; string.Insert(index,input); cout<<"\n插入字符串后的字符对象: "< string.Output(); delete[]input; break;} case3: {char*value=newchar[defaultSize+1]; cout<<"\n请输入要连接的字符串: "; cin>>value; AStringastr=value; string+=astr; cout<<"\n连接字符串后的字符对象: "< string.Output(); delete[]value; break;} case4: {intlen,i; AStringsubs; cout<<"\n请输入要截取的字符串长度: "; cin>>len; cout<<"\n请输入开始截取的位置: "; cin>>i; string.SubString(subs,i,len); cout<<"\n下面为截取后的字符串对象: "; subs.Output(); break;} case5: {char*value=newchar[128]; cout<<"\n请输入要比较的字符串: "; cin>>value; cout<<"\n字符串比较结果如下所示: "; string.Output(); if(string>value)cout<<">"; if(string==value)cout<<"="; if(string cout< break;} case6: cout<<"\n当前字符串对象的值如下所示: "; string.Output(); break; case7: string.Clear(); cout<<"\n字符串对象已清空! \n"; break; case8: {char*str=newchar[128]; cout<<"\n请输入要赋值的字符串(不能有空格): "; cin>>str; string=str; cout<<"\n赋值后的字符串对象为: "; string.Output(); break;} case9: cout<<"运行结束"< return0; break; default: cout<<"选择非法,请重选! "; break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 操作 源代码