string 类的构造


#define _CRT_SECURE_NO_WARNINGS
#include<iostream.h>
#include<string>
//using namespace std;
class String    
{    
public:  
	String();
	String(const char *s) ;
	String(String &s);
	~String();
	void display();
	friend String operator +(const String &s1,const String &s2);
	friend String operator -(const String &s1,const String &s2);
	//需要的成员函数(若需要的话,声明友元函数)  
private:    
	char *P;   //指向存储的字符串   
	int len;   //记录字符串的长度    
};
String::String()
{
	len=0;
	P=NULL;
}
String::String(const char *s)  
{  
	len = strlen(s);  
	P = new char[len+1];  
	strcpy(P,s);  
}  

String::String(String &s)
{
	len=s.len;
	P=new char[len+1];
	for(int i=0;i<len;i++)
		P[i]=s.P[i];
}
String ::~String()
{
	delete[] P;
}
String operator +(const String &s1,const String &s2)
{
	String S;
	S.len=s1.len+s2.len;
	S.P=new char[S.len+1];
	for(int i=0;i<s1.len;i++)
	{
		S.P[i]=s1.P[i];
		
	}
	for(int j=0;j<s2.len;j++)
	{
		S.P[j+s1.len]=s2.P[j]; 
	}
	return S;
}
String operator -(const String &s1,const String &s2)
{
	String S;
	int k=0,j=0;
	int i=0;
	S.len=s1.len+s2.len;
	S.P=new char[S.len];
	for(i=0;i<s1.len;i++)
	{
		if(s1.P[i]==' ')
		{
			continue;
		}
		S.P[k]=s1.P[i];
		k++;
	}
	for(i=0;i<s2.len;i++)
	{
		if(s2.P[i]==' ')
			continue;
		S.P[k+j]=s2.P[i];
		j++;
	}
	S.len = k+j;//在结尾的时候重新修改数组的长度
	return S;
}
void String::display()
{
	for(int i=0;i<len;i++)
		cout<<P[i];
}
int main( )  
{  
	String string1(" Hello  "), string2(" World ");  
	string1.display();  
	string2.display();  
	cout<<endl;
	String string3 = string1 + string2;  //定义了string的时候,系统自动调用拷贝构造函数
	string3.display();  
	cout<<endl;
	String string4 = string1 - string2;  
	string4.display(); 
	cout<<endl;
	system("pause");
	return 0;  
}

运行结果:




发布了74 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/fu_yunjian/article/details/52530726