作者在 2008-08-17 10:40:22 发布以下内容
#ifndef STRING_H
#define STRING_H
#include<iostream>
using namespace std;
#define STRING_H
#include<iostream>
using namespace std;
class String{
friend ostream&operator<<(ostream& os,String& str)
{
os<<str.m_data;
return os;
}
{
os<<str.m_data;
return os;
}
public:
String(const char* str=NULL);
String(const String& str);
int size(const String& str);
String operator+(const String& str);
String& operator=(const String& str);
bool operator==(const String& str);
~String(void) {delete[] m_data;}
String(const char* str=NULL);
String(const String& str);
int size(const String& str);
String operator+(const String& str);
String& operator=(const String& str);
bool operator==(const String& str);
~String(void) {delete[] m_data;}
protected:
char* m_data;
};
inline String::String(const char* str)
{
if(!str)
{
m_data=NULL;
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
{
if(!str)
{
m_data=NULL;
}
else
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
inline String::String(const String& str)
{
if(!str.m_data)
{
m_data=NULL;
}
else
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
{
if(!str.m_data)
{
m_data=NULL;
}
else
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
inline int String::size(const String& str)
{
if(!str.m_data)
{
return 0;
}
else
{
return (int) strlen(str.m_data);
}
}
{
if(!str.m_data)
{
return 0;
}
else
{
return (int) strlen(str.m_data);
}
}
inline String String::operator +(const String& str)
{
String newstr;
if(!str.m_data)
{
newstr=*this;
}
else if(!m_data)
{
newstr=str;
}
else
{
newstr.m_data= new char[strlen(this->m_data)+strlen(str.m_data)+1];
strcpy(newstr.m_data,m_data);
strcat(newstr.m_data,str.m_data);
}
return newstr;
}
inline String& String::operator=(const String& str)
{
if (this!=&str)
{
delete[] m_data;
if(!str.m_data) m_data=0;
else
{
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
{
String newstr;
if(!str.m_data)
{
newstr=*this;
}
else if(!m_data)
{
newstr=str;
}
else
{
newstr.m_data= new char[strlen(this->m_data)+strlen(str.m_data)+1];
strcpy(newstr.m_data,m_data);
strcat(newstr.m_data,str.m_data);
}
return newstr;
}
inline String& String::operator=(const String& str)
{
if (this!=&str)
{
delete[] m_data;
if(!str.m_data) m_data=0;
else
{
m_data = new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
}
return *this;
}
inline bool String::operator==(const String &str)
inline bool String::operator==(const String &str)
{
if ( strlen(str.m_data) != strlen(m_data) )
return false;
return strcmp(m_data,str.m_data)?false:true;
}
#endif
#endif