改造串类.docx
- 文档编号:2947377
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:14
- 大小:33.69KB
改造串类.docx
《改造串类.docx》由会员分享,可在线阅读,更多相关《改造串类.docx(14页珍藏版)》请在冰豆网上搜索。
改造串类
实验报告
实验题目:
实验2改造串类
姓名:
学号:
班级:
组别:
协作者:
指导教师:
实验时间:
周,星期,年月日
实验概述:
【实验目的及要求】:
对主教材的字符串String类操作较少,试重载字符串连接运算符+、重载字符串流输入运算符>>与输入运算符<<实现一个功能更强的类CString
【实验原理】:
【实验环境】(使用的软件):
MicrosoftVisualStudio2010
实验内容:
对主教材的字符串String类操作较少,试重载字符串连接运算符+、重载字符串流输入运算符>>与输入运算符<<实现一个功能更强的类CString
【实验方案设计】:
cstring.h
#ifndef__CString_H__
#define__CString_H__
#include"lk_list.h"//线性链表
//串类
classCString
{
protected:
//串实现的数据成员
mutablechar*strVal;//串值
intlength;//串长
public:
//抽象数据类型方法声明及重载编译系统默认方法声明
CString();//构造函数
virtual~CString();//析构函数
CString(constCString©);//复制构造函数
CString(constchar*copy);//从c风格串转换的构造函数
CString(LinkList
intLength()const;//求串长度
boolEmpty()const;//判断串是否为空
CString&operator=(constCString©);//赋值语句重载
constchar*CStr()const;//将串转换成C风格串
char&CString:
:
operator[](intpos)const;//重载下标运算符
};
//串相关操作
CStringoperator+(constCString&strFirst,constCString&strSecond);
//重载加法运算符+
ostream&operator<<(ostream&outStream,constCString&outStr);
//重载运算符<<
istream&operator>>(istream&inStream,CString&inStr);
//重载运算符>>
CStringRead(istream&input);//从输入流读入串
CStringRead(istream&input,char&terminalChar);
//从输入流读入串,并用terminalChar返回串结束字符
voidWrite(CString&s);//输出串
voidConcat(CString&addTo,constCString&addOn);
//将串addOn连接到addTo串的后面
voidCopy(CString©,constCString&original);
//将串original复制到串copy
voidCopy(CString©,constCString&origina,intn);
//将串original复制n个字符到串copy
intIndex(constCString&target,constCString&pattern,intpos=0);
//查找模式串pattern第一次在目标串target中从第pos个字符开始出现的位置
CStringSubString(constCString&s,intpos,intlen);
//求串s的第pos个字符开始的长度为len的子串
booloperator==(constCString&first,constCString&second);
//重载关系运算符==
booloperator<(constCString&first,constCString&second);
//重载关系运算符<
booloperator>(constCString&first,constCString&second);
//重载关系运算符>
booloperator<=(constCString&first,constCString&second);
//重载关系运算符<=
booloperator>=(constCString&first,constCString&second);
//重载关系运算符>=
booloperator!
=(constCString&first,constCString&second);
//重载关系运算符!
=
//串类及相关操作的实现部分
CString:
:
CString()
//操作结果:
初始化串
{
length=0;//串长度为0
strVal=NULL;//空串
}
CString:
:
~CString()
//操作结果:
销毁串,释放串所占用空间
{
delete[]strVal;//释放串strVal
}
CString:
:
CString(constCString©)
//操作结果:
由串copy构造新串——复制构造函数
{
length=strlen(copy.CStr());//串长
strVal=newchar[length+1];//分配存储空间
strcpy(strVal,copy.CStr());//复制串值
}
CString:
:
CString(constchar*copy)
//操作结果:
从c风格串转换构造新串——转换构造函数
{
length=strlen(copy);//串长
strVal=newchar[length+1];//分配存储空间
strcpy(strVal,copy);//复制串值
}
CString:
:
CString(LinkList
//操作结果:
从线性表转换构造新串——转换构造函数
{
length=copy.Length();//串长
strVal=newchar[length+1];//分配存储空间
for(inti=0;i {//复制串值 copy.GetElem(i+1,strVal[i]); } strVal[length]='\0';//串值以‘\0’结束 } intCString: : Length()const //操作结果: 返回串长度 { returnlength; } boolCString: : Empty()const //操作结果: 如果串为空,返回true,否则返回false { returnlength==0; } CString&CString: : operator=(constCString©) //操作结果: 赋值语句重载 { if(©! =this) { delete[]strVal;//释放原串存储空间 length=strlen(copy.CStr());//串长 strVal=newchar[length+1];//分配存储空间 strcpy(strVal,copy.CStr());//复制串值 } return*this; } constchar*CString: : CStr()const //操作结果: 将串转换成c风格串 { return(constchar*)strVal;//串值类型转换 } char&CString: : operator[](intpos)const //操作结果: 重载下标运算符 { inti=0; returnstrVal[i]; } voidConcat(CString&addTo,constCString&addOn) //操作结果: 将串addOn连接到addTo串的后面 { constchar*cFirst=addTo.CStr();//指向第一个串 constchar*cSecond=addOn.CStr();//指向第二个串 char*copy=newchar[strlen(cFirst)+strlen(cSecond)+1];//分配存储空间 strcpy(copy,cFirst);//复制第一个串 strcat(copy,cSecond);//连接第二个串 addTo=copy;//串赋值 delete[]copy;//释放copy } CStringoperator+(constCString&strFirst,constCString&strSecond) //操作结果: 重载加法运算符 { constchar*cFirst=strFirst.CStr();//指向第一个串 constchar*cSecond=strSecond.CStr();//指向第二个串 char*copy=newchar[strlen(cFirst)+strlen(cSecond)+1];//分配存储空间 strcpy(copy,cFirst);//复制第一个串 strcat(copy,cSecond);//连接第二个串 CStringanswer(copy);//构造串 delete[]copy;//释放copy returnanswer;//返回串 } ostream&operator<<(ostream&outStream,constCString&outStr) //操作结果: 重载运算符<< { cout< returnoutStream;//返回输出流对象 } istream&operator>>(istream&inStream,CString&inStr) //操作结果: 重载运算符>> { LinkList intsize=0;//初始线性表长度 charch;//临时字符 while((ch=inStream.peek())! =EOF&&//peak()从输入流中取一个字符 //输入流指针不变 (ch=inStream.get())! ='\n');//get()从输入流中取一个字符ch { temp.Insert(++size,ch);//构造串 } CStringanswer(temp);//用inStr返回串 inStr=answer; returninStream;//返回输入流对象 } CStringRead(istream&input) //操作结果: 从输入流读入串 { LinkList intsize=0;//初始线性长度 charch
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 改造