




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机高级语言(C+)实习报告题 目学生姓名: 班 学 号: 指导老师: 中国地质大学(武汉)机械与电子信息学院20 年 月实验二 MyString类定义和应用定义一个类MyString,其对象是字符串。该类包含两个成员变量,一个是指向一个容纳字符串的动态数组的指针变量,另一个是该动态数组的长度(也就是所包含的字符的个数)。需要在类中定义的函数包括:(1) 定义3个构造函数,第一个是默认构造函数,使得对象为空字符串,字符串长度为0;第二个接收一个C字符串作为参数,使得对象初始化为该参数的值;第四个是复制构造函数,接收MyString类型的对象为参数。(2)定义析构函数,将对象占用的内存返回给自
2、由存储。(3)定义两个重载的赋值操作符(定义为成员函数),一个可以将一个C字符串赋值给当前调用对象,一个可以将另外一个MyString类型的字符串赋值给当前调用对象。 /例如可以这样使用:MyString类型的对象s1和s2,s1=”hello”; s2=s1;(4)定义两个重载的等号操作符(可以用友元函数实现,也可以用成员函数实现),一个用来判断MyString类型字符串是否等于一个C字符串,另外一个用来判断两个MyString类型的字符串是否相等。/例如可以这样使用:if (s1= =”hello”)或者if (s1= =s2)(5)定义两个重载的加号操作符(可以用友元函数实现,也可以用成
3、员函数实现),一个用来将MyString类型对象和C字符串相连接,一个用来连接两个MyString类型对象。注意连接的两个字符串之间加一个空格。/例如s3=s1+s2; s3=s1+”hello”;(6)定义大于(>)和小于(<)操作符,用来比较两个MyString类型的字符串(可以用友元函数实现,也可以用成员函数)。/例如if (s1>s2); if (s1<s2)(7)定义输入操作符(>>)和输出操作符(<<),用来将MyString类型的字符串输入和输出(只能用友元函数实现)。并且,选择合适的流参数,使得既可以从键盘输入,也可以从文件输入,
4、既可以输出到屏幕,也可以输出到文件。/例如cin>>s1;cout<<s1; (8)定义成员函数length,用来得到MyString类型字符串的长度。/例如cout<<s1.length();(9)定义成员函数c_str(),用来将MyString类型的字符串转变为C字符串。/例如strcmp(s1.c_str(),s2.c_str();(10)定义成员函数input_line,用来输入一行MyString类型的字符串。既可以从键盘输入,也可以从文件输入。/例如s1.input_line(cin);(11)定义成员函数substr,用来得到并返回MyStr
5、ing类型调用对象的一个子字符串,该子字符串开始于调用对象的某位置position,长度是length(包含length个字符)。/例如s1=”Nice to meet you.”; s1.substr(5,2)应当返回”to”。(12)定义成员函数find,返回某一个字符串在调用对象中首次出现的位置。/例如对于s1=”Nice to meet you.”; s2=”to”,那么s1.find(s2)返回5,也就是”to”这个字符串首次在s1字符串中出现的位置是在索引为5的位置要求:(1)使用三个文件:类的接口文件;类的实现文件;应用程序文件。(2)给自己定义的类创建一个命名空间。(3)mai
6、n部分中,要对类中的成员函数和友元函数进行使用和测试。例如以下的测试程序(只是个例子,用来使用和测试我写的MyString类的各个成员函数,注意这是根据我的MyString类的定义写的,你要结合自己MyString类的定义来写相应的测试程序):int main()/声明并初始化s1,s2,s3MyString s1; /调用默认构造函数将s1初始化为空字符串,长度为0.MyString s2("hello");/调用带有一个c字符串参数的构造函数初始化s2为hello,长度为5./s2="HELLO" /调用重载的赋值操作符cout<<&qu
7、ot;请输入一个长度小于100的字符串:"cin>>s1; /调用重载的>>操作符,例如s1="world"MyString s3(s1); /调用拷贝构造函数(用s1对s3初始化) /输出s1,s2,s3的值,使用重载的输出<<操作符,以及使用成员函数length cout<<"s1 = "<<s1<<", and the size = "<<s1.length()<<endl; cout<<"s2 = &
8、quot;<<s2<<", and the size = "<<s2.length()<<endl; cout<<"s3 = "<<s3<<", and the size = "<<s3.length()<<endl;/连接s1和s2,并输出s3="!"+s2+s1+"!" /连接C字符串”!”和MyString类型变量s1,s2。 cout<<"s3 = "
9、;<<s3<<", and the size = "<<s3.length()<<endl;/判断s1和s2大小,使用重载的,>,<操作符if (s1=s2)cout<<"s1 is equal to s2.n"else if (s1>s2)cout<<"s1 is bigger than s2.n"else if (s2<s2)cout<<"s1 is smaller than s2.n" /使用重载的操作
10、符,判断MyString类型字符串和一个C字符串是否相等if (s1="world")cout<<"s1 is equal to world.n" /使用input_line和c_str函数cout<<"请输入一个长度小于100的一行字符串:"s3.input_line(cin); /例如输入nice to meet you.cout<<"s3 = "<<s3<<endl;char cs100;strcpy(cs,s3.c_str(); /将s3转变为C字
11、符串,赋值给C字符串cs。cout<<"The C-String is: "<<cs<<endl;/使用substr函数MyString s4; s4=s3.substr(5,2); /返回s3从index5处的子字符串,大小为2.得到s4="to" s1=s3.substr(5,2);/返回s3从index5处的子字符串,大小为2.得到s1="to"cout<<"s4 = "<<s4<<endl;cout<<"s1 =
12、"<<s1<<endl;/使用find函数int index=s3.find(s4); /找出s4(”to”)在s3(”nice to meet you.”)中首次出现的位置为5.cout<<"We find s4 is in the position of "<<index<<endl;return 0;C+程序如下#include <iostream>using namespace std;const int MAXSIZE=100;class MyString /private:char
13、 *str;/char strMAXSIZE;public:MyString(char *s="");/构造函数MyString(MyString &obj);/拷贝构造函数int strLen();/返回字符串长度void strLwr();/转为小写字母void strUpr();/转为大写字母void strCat(MyString &s2);/字符串连接int strCmp(MyString &s2);/字符串比较void strCpy(MyString &s2);/字符串拷贝void show();/显示字符串函数MyString(
14、);/析构函数;/end MyStringMyString:MyString(char *s)/构造函数int len=0;char *p=s;while(*p)/求字符串s长度p+;len+;/分配空间,放置字符串sstr=new charlen+1;for(int i=0;i<=len;i+)stri=si;MyString:MyString(MyString &obj)/拷贝构造函数int len=obj.strLen();/求出obj中字符串长度str=new charlen+1;/分配空间for(int i=0;i<=len;i+)/拷贝字符串stri=obj.s
15、tri;int MyString:strLen()/返回字符串长度int len=0;char *p=str;while(*p)/求字符串str的长度len+;p+;return len;void MyString:strLwr()/转换为小写字母char *p=str;/str首部while(*p)if(*p>='A'&&*p<='Z')/大写字母时*p+=32;/'a'-'A'p+;void MyString:strUpr()/转换为大写字母char *p=str;/str首部while(*p)if
16、(*p>='a'&&*p<='z')/小写字母时*p-=32;p+;int MyString:strCmp(MyString &s2)/字符串比较,char *p=str;/p指向当前字符串首部char *q=s2.str;/q指向s2字符串首部while(*p&&*q&&*p=*q)/p、q都没指向'0'且*p不等于*qp+;q+;return (*p-*q);void MyString:strCpy(MyString &s2)/字符串拷贝int len=s2.strL
17、en();/第2个字符串长度if(len!=strLen()/如果两个字符串长度不等delete str;/释放原有空间str=new charlen+1;/分配新的合适大小的空间for(int i=0;i<=len;i+)/拷贝字符串stri=s2.stri;void MyString:strCat(MyString &s2)/字符串连接char *p=str;char *q=s2.str;int len1=strLen();/当前字符串长度int len2=s2.strLen();/第2个字符串长度 char *newstr=new charlen1+len2+1;/连接后字
18、符串所占空间for(int i=0;i<len1;i+)/拷贝第一个字符串newstri=stri;for(int j=0;j<=len2;j+)/拷贝第二个字符串newstrlen1+j=s2.strj;delete str;/释放原有str指向的空间str=newstr;MyString:MyString()/析构函数delete str;void MyString:show()/显示字符串函数cout<<"当前字符串:"<<str<<endl;int main()char str1100;char str2100;cou
19、t<<"请输入第一个字符串:"gets(str1);cout<<"请输入第二个字符串:"gets(str2);MyString s1(str1);MyString s2(str2);/测试长度函数cout<<"n/测试长度函数"<<endl;cout<<"s1长度:"<<s1.strLen()<<endl;cout<<"s2长度:"<<s2.strLen()<<endl;/测试转大写字母cout<<"n/测试转大写字母"<<endl;s1.strUpr();s1.show();/测试转为小写字母cout<<"n/测试转为小写字母"<<endl;s1.strLwr();s1.show();/测试字符串比较cout<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 依据施工合同(标准版)
- 酒店管理模拟技能考试题及答案
- 企业持有上市公司股权会计问题探析分析研究 财务会计学专业
- 高考历史云南真题及答案
- 船舶制造新技术创新创业项目商业计划书
- 绿茶柠檬蜜饯行业跨境出海项目商业计划书
- 老年非遗传承创新创业项目商业计划书
- 老人健康关怀手表企业制定与实施新质生产力项目商业计划书
- 美容产品代工生产自动化行业跨境出海项目商业计划书
- 社交焦虑心理干预创新创业项目商业计划书
- 先兆流产课件
- 2025至2030鸡汁行业风险投资态势及投融资策略指引报告
- 手足外科护理常规
- 光电成像原理与技术课件
- (高清版)DB31∕T 1578-2025 微型消防站建设与运行要求
- 儿童百日咳的诊治
- 40篇英语短文搞定高考3500个单词(全部含翻译,重点解析)
- 江苏艺考笔试题及答案
- 2025年中考语文作文中考12大主题作文模板!-分步详解+例文示范
- 餐饮连锁稽核管理制度
- 详细操作说明书及维修指导手册
评论
0/150
提交评论