#include<iostream>
#include<cstring>
using namespace std;
class String
{
public:
String();
String(const char*a);
~String();
void display();
String operator+(const String &a);
String operator-(const String &a);
private:
char *p; //指向存储的字符串
int len; //记录字符串的长度
};
String::String()
{
len=0;
p=NULL;
}
String::String(const char*a)
{
len=strlen(a);
p=new char[len+1];
strcpy(p,a);
}
String::~String()
{
if(p==NULL)
delete []p;
}
void String::display()
{
cout<<p<<endl;
}
String String::operator+(const String &a)
{
String b;
b.len=(*this).len+a.len;
b.p=new char[b.len+1];
strcpy(b.p,(*this).p);
strcat(b.p,a.p);
return b;
}
String String::operator-(const String &a)
{
char*o=new char[(*this).len+1];
int i;
i=(*this).len-1;
while(i>0&&(p[i]==' '))
--i;
strcpy(o,(*this).p);
o[i+1]='\0';
i=0;
int j=0;
char*u=new char[a.len+1];
while(i<a.len&&a.p[i]==' ')
{
++i;
}
for(; i<a.len; ++i,++j)
{
u[j]=a.p[i];
}
u[j+1]='\0';
String b;
b.len=strlen(o)+strlen(u);
b.p=new char[b.len+1];
strcpy(b.p,o);
strcat(b.p,u);
delete o;
delete u;
return b;
}
int main()
{
char a[]=" I like ";
char b[]=" apple ";
String m(a),n(b),p;
m.display();
n.display();
p=m+n;
p.display();
p=m-n;
p.display();
return 0;
}
sizeof 和strlen是个神奇的东西。
<img src="https://img-blog.csdn.net/20150509133904125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2xpdXpoaWxpbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />