改造串类.docx

上传人:b****5 文档编号:2947377 上传时间:2022-11-16 格式:DOCX 页数:14 大小:33.69KB
下载 相关 举报
改造串类.docx_第1页
第1页 / 共14页
改造串类.docx_第2页
第2页 / 共14页
改造串类.docx_第3页
第3页 / 共14页
改造串类.docx_第4页
第4页 / 共14页
改造串类.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

改造串类.docx

《改造串类.docx》由会员分享,可在线阅读,更多相关《改造串类.docx(14页珍藏版)》请在冰豆网上搜索。

改造串类.docx

改造串类

实验报告

实验题目:

实验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)

//操作结果:

重载运算符>>

{

LinkListtemp;//临时线性表

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)

//操作结果:

从输入流读入串

{

LinkListtemp;//临时线性表

intsize=0;//初始线性长度

charch

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1