第7周-项目4-String类的构造-构造String类的加、减运算
来源:互联网 发布:全职美工招聘 编辑:程序博客网 时间:2024/05/22 03:52
问题及代码:
构造String类的加、减运算。
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:String.cpp *作 者:单昕昕 *完成日期:2015年4月26日 *版 本 号:v1.0 *问题描述:请构造String类的加、减运算。其中,s1 + s2将两个字符串的连接起来;s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接。*程序输入:无。*程序输出:字符串。*/ #include<iostream>#include<cstring>using namespace std;class String{public: String(); ~String();//析构函数 String(const char *s); String(String &str); friend String operator+(String &s1,String &s2);//s1 + s2将两个字符串的连接起来 friend String operator-(String &s1,String &s2);//s1 - s2是将s1的尾部空格和s2的前导空格去除后的连接 void display();private: char *p; int len;};String::String( )//默认构造函数{ len=0; p=NULL;}String::~String(){ if(!p) delete []p;}String::String(const char *s){ len=strlen(s); p=new char[len+1]; strcpy(p,s);}String::String(String &str){ len=str.len; p=new char[len+1]; strcpy(p,str.p);}String operator+(String &s1,String &s2)//直接把两个字符串连结到一起{ String s; s.p=new char[s1.len+s2.len+1];//不计第一个字符串的结束符 strcpy(s.p,s1.p);//先复制s1 //下面这里可以用strcat连接函数,例如strcat(s1,s2),会先去掉s1的结束符后再把s2接连到s1末尾 int i; for(i=0; i<s2.len+1; i++) s.p[s1.len+i]=s2.p[i]; return s;}String operator-(String &s1,String &s2)//要先去除s1的尾部空格和s2的前导空格{ String s; int i,count1=0,count2=0;//去除s1的尾部空格 for(i=s1.len-1; s1.p[i]==' '; i--) { count1++; s1.p[i]='\0'; } for(i=0; s2.p[i]==' '; i++) count2++; for(i=0; i<s2.len-count2; i++) //覆盖去除s2的前导空格 { s2.p[i]=s2.p[i+1]; } //cout<<count1<<" "<<count2<<endl; //cout<<s1.len<<" "<<s2.len<<endl; cout<<"观察空格去除情况:"<<endl; cout<<"/"<<s1.p<<"/"<<endl; cout<<"/"<<s2.p<<"/"<<endl; s.p=new char[s1.len+s2.len+1-count1-count2]; strcpy(s.p,s1.p); strcat(s.p,s2.p); return s;}void String::display(){ cout<<p<<endl;}//下面定义用于测试的main()函数int main(){ String s1(" Attack on "), s2(" Titan "); s1.display(); s2.display(); String s; s=s1+s2; cout<<"s1+s2:"; s.display(); s=s1-s2; cout<<"s1-s2:"; s.display(); return 0;}
运行结果:
构造String类的加、减运算。
学习心得:
如果使用strcat函数会比用for语句连接字符串方便很多。
去除空格的时候要考虑到可能不止一个空格,所以我把空格数都用变量记录下来了。
这个程序老师木有给函数,什么都得自己想自己定义,感觉这个才是写这个程序我面临的最大挑战。
0 0
- 第7周-项目4-String类的构造-构造String类的加、减运算
- 第7周项目4-string类的构造
- 第7周项目4-string类的构造
- 第8周项目4 String类的构造
- 第8周项目4-String类的构造
- 第8周项目4-String类的构造
- 第8周 项目4 String类的构造
- 第8周项目4-String类的构造
- 第12周项目4-String类的构造
- 第12周项目4-string类的构造
- 第12周项目4-String类的构造
- 第十二周项目 String类的构造
- 第八周项目 四 【项目4-String类的构造】
- String类的构造
- String类的构造
- String类的构造
- String 类的构造
- string 类的构造
- 最长回文子串优化
- 算法导论笔记:13-01红黑树概念与基本操作
- MongoDB 基础(三)mongodb 中的索引使用
- 代码杂记(八)
- iOS中frame、bound、center以及transform属性
- 第7周-项目4-String类的构造-构造String类的加、减运算
- 第七周项目1——实现复数类中的运算符重载(成员函数)
- 分解质因数
- for和while区别
- Oracle数据库AWR的简单介绍
- Java中字节流和字符流的read()方法为什么返回的值是int类型
- 《平凡的世界》中王世才的悼词
- 五一你有什么计划
- 【转】C#线程池用法