65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
class String//注意这里String中的'S'是大写
{
private:
char * p;
int size;
public:
String();//建立一个空串
String(int sz);
String(char *str);//用C++串来初始化,注意char *str这里实际上就是str是一个串即是一个串对象
String(const String &ob);//用串对象来初始化
~String(){delete []p;};
int strsize() {return strlen(p);}//注意这里的p是字符串对象
friend ostream & operator <<(ostream & stream,String & ob);
String operator +(String & ob);
String operator +(char *s);
friend String operator +(char * s,String & ob);
};
String::String()
{
size=1;//用来存放结束标志NULL
p=new char[size];
if(p==NULL)
{
cout <<"分配内存出错" <<endl;
exit(1);
}
*p='\0'; //初始化串
}
String::String(int sz)
{
size=sz;
p=new char[sz];
if(p==NULL)
{
cout <<"分配内存错误!" <<endl;
exit(1);
}
*p = '\0';//初始化串
}
String::String(char *str)
{
size=strlen(str)+1;
p=new char[size];
if(p==NULL)
{
cout <<"分配内存错误" <<endl;
exit(1);
}
strcpy(p,str);
}
String::String(const String & ob) //建议用const修饰,不然常量对象就不让使用
{
size=ob.size;
p=new char[size];
if(p==NULL)
{
cout <<"分配内存出错!" <<endl;
exit(1);
}
strcpy(p,ob.p);
}
ostream & operator <<(ostream & stream,String & ob)
{
stream <<ob.p<<endl;
return stream;
}
String String ::operator +(String & ob)
{
//两个串对象的连接
int len;
len=strlen(p)+strlen(ob.p)+1;
String temp(len);
strcpy(temp.p,p);
strcat(temp.p,ob.p);
return temp;
}
String String::operator +(char * s)
{
//一个串对象与一个带引号串的连接
int len;
len=strlen(s)+strlen(p)+1;
String temp(len);
strcpy(temp.p,p);
strcat(temp.p,s);
return temp;
}
String operator +(char * s,String & ob)
{
int len;
len=strlen(s)+strlen(ob.p)+1;
String temp(len);
strcpy(temp.p,s);
strcat(temp.p,ob.p);
return temp;
}
int main(int argc, char *argv[])
{
String str1;
String str2(5);
String str3("12345");
String str4(str3);
String str5 = str4 + "678";//拷贝构造用const的好处,不然是不对的,下面同理
String str6 = "0" + str4;
String str7 = str3 + str4;
cout<<"1= "<<str1<<endl;
cout<<"2= "<<str2<<endl;
cout<<"3= "<<str3<<endl;
cout<<"4= "<<str4<<endl;
cout<<"5= "<<str5<<endl;
cout<<"6= "<<str6<<endl;
cout<<"7= "<<str7<<endl;
system("PAUSE");
return 0;
}String::String()
{
size=1;//用来存放结束标志NULL
p=new char[size];
if(p==NULL)
{cout < <"分配内存出错" < <endl;
exit(1);
}
p=NULL; //上面开辟空间成功,你这怎么将其置空呢?可以修改为*p = '\0';
}