/*
* 程序的版权和版本声明部分
* Copyright (c)2014, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:扩充String类
* 作 者:孔云
* 完成日期:2014年4月27日
* 版 本 号: v1.0
* 输入描述:主函数中给出。
* 问题描述:构造String类的加减运算、将两个字符串相加减,字符串相加表示两个字符串连接起来,相减表示前者的尾部空格和后者的前导空格去除后的连接。
* 输出描述:加减运算后的字符串。
*/
#include <iostream>
#include <Cstring>
using namespace std;
class String
{
public:
String()
{
len=0;
p=NULL;//指针赋值为0即空指针
}
String(String &str);
String friend operator+(String &s1,String & s2);
String friend operator-(String &s1,String & s2);
String(const char *d);
void display()
{
cout<<p<<endl;
}
~String();
private:
int len;
char *p;
};
String::~String()
{
if(!p) delete []p;
}
String::String(String &str)
{
len=str.len;
if(p!=NULL) delete[]p;
p=new char[len+1];
strcpy(p,str.p);
}
String operator+(String &s1,String & s2)
{
String st;
st.len=s1.len+s2.len;
st.p=new char[st.len+1];
strcpy(st.p,s1.p);
strcat(st.p,s2.p);
return st;
}
String operator-(String &s1,String & s2)
{
String s;
int j;
char *a=new char[s1.len+1];
strcpy(a,s1.p);
int i=s1.len-1;
while(i>=0&&a[i]==' ')--i;
a[i+1]='\0';
char *b=new char[s2.len+1];
strcpy(b,s2.p);
i=0;
while(i<s2.len&&b[i]==' ')++i;
j=0;
while(i<s2.len&&b[i]!='\0')
{
b[j]=b[i];
++i;
++j;
}
b[j]='\0';
s.len=strlen(a)+strlen(b);
s.p=new char[s.len+1];
strcpy(s.p,a);
strcat(s.p,b);
delete a;
delete b;
return s;
}
String::String(const char *d)
{
len=strlen(d);
p=new char[len+1];
strcpy(p,d);
}
int main()
{
String t1("It's "),t2(" nice very much!"),t3;
t1.display();
t2.display();
t3=t1+t2;
t3.display();
t3=t1-t2;
t3.display();
return 0;
}
心得体会:一字母之差,坏我大局!做事马虎不得,学习更要认真啊