字符串类设计.docx
《字符串类设计.docx》由会员分享,可在线阅读,更多相关《字符串类设计.docx(15页珍藏版)》请在冰豆网上搜索。
字符串类设计
华北科技学院计算机学院综合性实验
实验报告
课程名称《C++程序设计B》
实验学期2017至2016学年第二学期
学生所在系部网络工程
年级2015专业班级网络B151
学生姓名学号
任课教师胡英
成绩评定:
1、类及类文件、函数文件设计:
A(),B(),C(),D(),F()
2、程序结构合理,格式美观:
A(),B(),C(),D(),F()
3、语法语义及算法准确:
A(),B(),C(),D(),F()
4、实验结果正确,运行界面:
A(),B(),C(),D(),F()
5、操作熟练,解析完整:
A(),B(),C(),D(),F()
5、报告规范度:
A(),B(),C(),D(),F()
实验成绩
计算机学院制
《C++程序设计》课程综合性实验报告
开课实验室:
基础实验室三2018年6月5日
实验题目
字符串类设计
一、实验目的
掌握类的概念及构造方法;掌握构造函数的定义与使用;掌握友元的定义与使用;掌握运算符的重载定义与使用。
掌握继承和派生概念及应用,掌握多态方法及应用。
二、设备与环境
微型计算机、Windows系列操作系统、VisualC++6.0等编辑软件
三、实验内容
设计字符串类。
重载字符串+(连接)、=(复制)、判断(<、>、==),并编程实现求字符串长度、字符串转换函数(小写转换为大写及大写转换为小写)函数:
MyString();
MyString(char*ptr);
MyString(constMyString&str);
MyStringoperator+(MyString&str);
MyStringoperator=(MyString&str);
MyStringoperator>(MyString&str);
MyStringoperator<(MyString&str);
MyStringoperator==(MyString&str);
friendostream&operator<<(ostream&s,MyString&str);
friendistream&operator>>(istream&s,MyString&str);
MyStringLenString(MyString&str);
MyStringLwrString(MyString&str);
MyStringUprString(MyString&str);
四、设计过程(包括类的数据成员、成员函数、友元函数及主函数,写出主要代码)
classMyString{
public:
MyString(){p=NULL;}
MyString(char*str);
MyString(constMyString&str);
intlength();
MyStringoperator+(MyString&str);
booloperator=(MyString&str);
booloperator>(MyString&str);
booloperator<(MyString&str);
booloperator==(MyString&str);
boolLwrString();
boolUprString();
friendostream&operator<<(ostream&s,MyString&str);
friendistream&operator>>(istream&s,MyString&str);
private:
char*p;
char*getP();
};
intmain(){
MyStringMyString1("ZOO"),MyString2(MyString1),MyString3;
cout<<"MyString1="<cout<<"inputMyString3"<cin>>MyString3;
cout<<"MyString3="<cout<<"MyString3.length="<<(MyString3.length())<cout<<"MyString3=MyString1resultis:
"<<(MyString3=MyString1)<cout<<"MyString3="<MyStringMyString4=MyString1+MyString3;
cout<<"MyString1+MyString3="<cout<<"inputMyString3"<cin>>MyString3;
cout<<"MyString1>MyString3resultis:
"<<(MyString1>MyString3)<cout<<"MyString1"<<(MyString1cout<<"MyString1==MyString2resultis:
"<<(MyString1==MyString2)<cout<<"MyString3.UprString()resultis:
"<<(MyString3.UprString())<cout<<"MyString3="<cout<<"MyString1.LwrString()resultis:
"<<(MyString1.LwrString())<cout<<"MyString1="<}
五、实验结果(运行界面)及测试数据分析
MyString1("ZOO")调用构造函数MyString:
:
MyString(char*str),MyString2(MyString1)调用复制构造函数MyString:
:
MyString(constMyString&str),MyString3调用构造函数MyString()。
使用运算符重载函数
>>输入字符串对MyString3重新赋值为hello。
MyString3调用成员函数intlength()求得字符串MyString3的长度。
使用运算符重载函数
=把MyString1的值赋给MyString3。
使用运算符重载函数
+把字符串MyString1和MyString3进行连接。
使用运算符重载函数
>和<对字符串MyString1和MyString3进行判断。
使用运算符重载函数==对字符串MyString1和MyString2进行判断。
MyString3调用函数UprString()把字符串小写转换为大写。
MyString1调用函数LwrString()把字符串大写转换为小写。
六、实验总结
通过本学期的课程学习使我对C++程序设计有了初步的认识,也让我对面向对象有了一个更深刻的理解。
本系统虽然仍然存在着不足之处,但对于题目要求实现的功能均已实现。
源代码:
#include
usingnamespacestd;
classMyString{
public:
MyString(){p=NULL;}
MyString(char*str);
MyString(constMyString&str);
intlength();
MyStringoperator+(MyString&str);
booloperator=(MyString&str);
booloperator>(MyString&str);
booloperator<(MyString&str);
booloperator==(MyString&str);
boolLwrString();
boolUprString();
friendostream&operator<<(ostream&s,MyString&str);
friendistream&operator>>(istream&s,MyString&str);
private:
char*p;
char*getP();
};
MyString:
:
MyString(char*str){
p=str;
}
MyString:
:
MyString(constMyString&str){
p=str.p;
}
char*MyString:
:
getP(){
returnp;
}
intMyString:
:
length(){
intlen=0;
for(inti=0;p[i]!
='\0';i++){
len++;
}
returnlen;
}
MyStringMyString:
:
operator+(MyString&str){
char*p1,*p2,*p3;
intlen1=0,len2=0;
p1=p;
p2=str.getP();
len1=this->length();
len2=str.length();
char*resultChar=newchar[len1+len2+1];
p3=resultChar;
for(inti=0;iresultChar[i]='\0';
}
while(*p1!
='\0'){
*p3=*p1;
p3++;
p1++;
}
while(*p2!
='\0'){
*p3=*p2;
p3++;
p2++;
}
returnMyString(resultChar);
}
boolMyString:
:
operator=(MyString&str){
char*p2,*p3;
intlen2=0;
p2=str.getP();
len2=str.length();
char*resultChar=newchar[len2+1];
for(inti=0;iresultChar[i]='\0';
}
p3=resultChar;
while(*p2!
='\0'){
*p3=*p2;
p3++;
p2++;
}
p=resultChar;
returntrue;
}
boolMyString:
:
operator>(MyString&str){
char*p1,*p2;
intlen1=0,len2=0;
p1=p;
p2=str.getP();
len1=this->length();
len2=str.length();
while(*p1!
='\0'&&*p2!
='\0'){
if(*p1>*p2){
returntrue;
}elseif(*p1<*p2){
returnfalse;
}
p1++;
p2++;
}
if(*p1=='\0'){
returnfalse;
}else{
returntrue;
}
}
boolMyString:
:
operator<(MyString&str){
char*p1,*p2;
intlen1=0,len2=0;
p1=p;
p2=str.getP();
len1=this->length();
len2=str.length();
while(*p1!
='\0'&&*p2!
='\0'){
if(*p1>*p2){
returnfalse;
}elseif(*p1<*p2){
returntrue;
}
p1++;
p2++;
}
if(*p2=='\0'){
returnfalse;
}else{
returntrue;
}
}
boolMyString:
:
operator==(MyString&str){
intlen1=0,len2=0;
char*p1,*p2;
len1=this->length();
len2=str.length();
p1=p;
p2=str.getP();
if(len1==len2){
while(*p1!
='\0'){
if(*p1!
=*p2){
returnfalse;
}
p1++;
p2++;
}
returntrue;
}else{
returnfalse;
}
}
boolMyString:
:
LwrString(){//大转小
intlen=0;
len=this->length();
char*resultChar=newchar[len+1];
resultChar[len]='\0';
for(inti=0;iif(p[i]<65||p[i]>90){
returnfalse;
}
resultChar[i]=p[i];
}
for(inti=0;iresultChar[i]=resultChar[i]+32;
}
p=resultChar;
returntrue;
}
boolMyString:
:
UprString(){//小转大
intlen=0;
len=this->length();
char*resultChar=newchar[len+1];
resultChar[len]='\0';
for(inti=0;iif(p[i]<97||p[i]>122){
returnfalse;
}
resultChar[i]=p[i];
}
for(inti=0;iresultChar[i]=resultChar[i]-32;
}
p=resultChar;
returntrue;
}
ostream&operator<<(ostream&s,MyString&str){
s<returns;
}
istream&operator>>(istream&s,MyString&str){
structmyString{
charstr1;
myString*next;
};
intcount1=0,len=0;
charstr2;
myString*head=NULL,*myString1=NULL,*myString2=NULL;
cout<<"请输入字符串,以0结束:
"<cin>>str2;
while(str2!
='0'){
myString1=newmyString;
myString1->str1=str2;
myString1->next=NULL;
if(count1==0){
head=myString1;
count1=1;
}else{
myString2->next=myString1;
}
myString2=myString1;
len++;
cin>>str2;
}
char*resultChar=newchar[len+1];
resultChar[len]='\0';
myString2=head;
inti=0;
while(myString2!
=NULL){
resultChar[i]=myString2->str1;
myString2=myString2->next;
i++;
}
str.p=resultChar;
returns;
}
intmain(){
MyStringMyString1("ZOO"),MyString2(MyString1),MyString3;
cout<<"MyString1="<cout<<"inputMyString3"<cin>>MyString3;
cout<<"MyString3="<cout<<"MyString3.length="<<(MyString3.length())<cout<<"MyString3=MyString1resultis:
"<<(MyString3=MyString1)<cout<<"MyString3="<MyStringMyString4=MyString1+MyString3;
cout<<"MyString1+MyString3="<cout<<"inputMyString3"<cin>>MyString3;
cout<<"MyString1>MyString3resultis:
"<<(MyString1>MyString3)<cout<<"MyString1"<<(MyString1cout<<"MyString1==MyString2resultis:
"<<(MyString1==MyString2)<cout<<"MyString3.UprString()resultis:
"<<(MyString3.UprString())<cout<<"MyString3="<cout<<"MyString1.LwrString()resultis:
"<<(MyString1.LwrString())<cout<<"MyString1="<}
感谢下载!
欢迎您的下载,资料仅供参考