字符串的问题 结合赋值运算符 运算符重载**
不允许修改主函数,请将以下代码补充完整。
class String {
char *ptr;
public:
String(char *s)
{
ptr=new char[strlen(s)+1];
strcpy(ptr, s);
}
~String() { delete []ptr; }
void print() { cout<<ptr<<endl; }
};
int main( )
{ String p1("book"), p2("pen"),p3("good"),p4;
p4 = p4 = p1 ;
p3 = p1 = p2;
cout<<"p2:";
p2.print();
cout<<"p1:"<<p1;
cout<<"p3:"<<p3;
p4+=p3;
cout<<"p4:"<<p4;
p1=p1;
cout<<"p1:"<<p1;
return 0;
}
【输入形式】
【输出形式】
【样例输入】
【样例输出】
p2:pen
p1:pen
p3:pen
p4:bookpen
p1:pen
**
```cpp
#include <iostream>
#include<string.h>
using namespace std;
class String {
char *ptr;
int len;
public:
String()
{ptr=NULL;
} //String():len(0),ptr(new char('\0')){}
String(char *s)//:len(s.len)
{
ptr=new char[strlen(s)+1];
strcpy(ptr, s);
}
~String() { delete []ptr; }
void print() { cout<<ptr<<endl; }
friend ostream&operator<<(ostream&out,const String&s);
String &operator=(const String&s)
{
if(&s==this)
{
return *this;
// delete []Str;
}
else
{
ptr=new char[strlen(s.ptr)+1];
strcpy(ptr,s.ptr);
return *this;
}
}
String &operator+=(String&s)
{
char*pnew=ptr;
ptr=new char[strlen(ptr)+strlen(s.ptr)+1];
strcpy(ptr,pnew);
strcat(ptr,s.ptr);
delete []pnew;
// str=newstr;
return *this;
}
};
/*String& String::operator=(const String&Str)
{
if(&Str==this)
{
return *this;
delete []str;
}
else
{
str=new char[strlen(Str.str)+1];
strcpy(str,Str.str);
return *this;
}
}
String& String::operator+=(const String&s)
{
// int len=strlen(str)+strlen(Str.ptr)+1;
//char *newstr=new char[len];
//memset(newstr,0,len);
// strcpy(newstr,str);
// strcpy(newstr,Str.str);
char*ptemp=ptr;
ptr=new char[strlen(ptr)+strlen(s.ptr)+1];
strcpy(ptr,pnew);
strcat(ptr,s.ptr);
delete []pnew;
// str=newstr;
return *this;
}
*/
ostream&operator<<(ostream&out,const String&s)
{
out<<s.ptr<<endl;
}
int main( )
{ String p1("book"), p2("pen"),p3("good"),p4;
p4 = p4 = p1 ;
p3 = p1 = p2;
cout<<"p2:";
p2.print();
cout<<"p1:"<<p1;
cout<<"p3:"<<p3;
p4+=p3;
cout<<"p4:"<<p4;
p1=p1;
cout<<"p1:"<<p1;
return 0;
}
就酱紫了 算然我现在还不懂这个题是怎么写出来的