#include <iostream>
#include <cstring>
using namespace std;
class String
{
private:
char *ptr;
public:
String()//构造函数
{
ptr = NULL;
}
String(const char * s)//构造函数,用字符串s初始化
{
ptr=new char[strlen(s)+1];
strcpy(ptr,s);
}
String(const String& s)//拷贝构造函数
{
if(!s.ptr)
{
ptr=NULL;
return;
}
ptr=new char[strlen(s.ptr)+1];
strcpy(ptr,s.ptr);
}
void concat(const String &s)//将字符串s连接到当前字符串后
{
char* str=new char[strlen(ptr)+strlen(s.ptr)+1];
int i;
for (i=0;i<strlen(ptr);i++)
{
str[i]=ptr[i];
}
for (int j=0;i<strlen(ptr)+strlen(s.ptr)+1;i++,j++)
{
str[i] = s.ptr[j];
}
ptr=str;
}
String substring(int begin,int len)
{
char *str=new char[len+1];
for(int i=0;i<len;i++)
{
str[i]=ptr[begin+i];
}
return str;
}
String& operator=(const String &s)//赋值运算符
{
if (this == &s) return *this;
delete []ptr;
ptr = new char[strlen(s.ptr) + 1];
strcpy(ptr, s.ptr);
return *this;
}
int length()const //返回字符串长度
{
int len=strlen(ptr);
return len;
}
void print()const //输出字符串
{
if(ptr!=NULL)
cout<<ptr<<endl;
}
~String()//析构函数
{
if(ptr) delete []ptr;
}
};
int main()
{
String s1("hello");
String s2(s1);
String s3;
s1.print();
s2.print();
s3.print();
s1 = "good morning ";
s2 = "beijing";
(s3=s2)=s1;
cout << s1.length() << endl;
cout << s2.length() << endl;
cout << s3.length() << endl;
s1.print();
s2.print();
s3.print();
s1.concat(s2);
s1.print();
s2.print();
String s4;
s4 = s2.substring(2,3);
s4.print();
s4 = s2.substring(2,15);
s4.print();
return 0;
}
同问