问题描述:
【项目4-String类的构造】
写一个能处理字符串的类,其数据成员如下所示:
提示:有指针成员,设计时要注意。这个,你懂的。
代码:
#include <iostream>
#include <cstring>
using namespace std;
class String{
public:
String();
String(const char *p);
String(String &s);
friend String operator+(String &s1,String &s2);
friend String operator-(String &s1,String &s2);
void display();
~String();
private:
char *p;
int len;
};
String::String(){
p=NULL;
len=0;
}
String::String(const char *s){
len=strlen(s);
p=new char[len+1];
strcpy(p,s);
}
String::String(String &s){
len=s.len;
if(p!=NULL)delete[]p;
p=new char[len+1];
strcpy(p,s.p);
}
String::~String(){
if(p==NULL)delete[]p;
}
String operator+(String &s1,String &s2){
String s;
s.len=s1.len+s2.len;
s.p=new char[s.len+1];
strcpy(s.p,s1.p);
strcat(s.p,s2.p);
return s;
}
String operator-(String &s1,String &s2){
String s;
int counta=0,countb=0;
int i;
for(i=s1.len-1;s1.p[i]==' ';i--){
counta++;
s1.p[i]='\0';
}
for(i=0;s2.p[i]==' ';i++)
countb++;
for(i=0;i<s2.len-countb;i++)
s2.p[i]=s2.p[i+1];
s.len=s1.len+s2.len-counta-countb;
s.p=new char[s.len+1];
strcpy(s.p,s1.p);
strcat(s.p,s2.p);
return s;
}
void String::display( ){
cout<<p<<endl;
}
int main(){
String string1(" Hello "), string2(" World ");
string1.display();
string2.display();
String string3;
string3 = string1 + string2;
string3.display();
string3 = string1 - string2;
string3.display();
return 0;
}
运行结果: