我写的string类
//===============================string.h===============================//#ifndef _string_h
#define _string_h
class string
{
private:
char *ptr;
public:
string():ptr(0){}
string(const char *p);
string(string &p);
~string();
public:
string &operator=(const char *p);
string &operator=(string &p);
bool operator==(const char *p);
bool operator==(string &p);
bool operator!=(const char *p);
bool operator!=(string &p);
bool operator!();
char operator[](unsigned long i);
unsigned long size();
void subString(string &p,int start,int finish);
char *getPointer();
};
#endif
[ 本帖最后由 yan 于 2007-12-2 21:52 编辑 ] //===============================string.cpp===============================//
#include <string.h>
#include "string.h"
string::string(const char *p)
{
ptr=new char;
strcpy(ptr,p);
}
string::string(string &p)
{
ptr=new char;
strcpy(ptr,p.ptr);
}
string::~string()
{
if(ptr)delete ptr;
}
string &string::operator=(const char *p)
{
if(ptr)
{
delete ptr;
ptr=0;
}
if(p)
{
ptr=new char;
strcpy(ptr,p);
}
return *this;
}
string &string::operator=(string &p)
{
if(ptr)
{
delete ptr;
ptr=0;
}
if(p.ptr)
{
ptr=new char;
strcpy(ptr,p.ptr);
}
return *this;
}
bool string::operator==(const char *p)
{
if(p&&ptr)
{
if(!strcmp(ptr,p))return true;
}
else if(!(p||ptr))return true;
return false;
}
bool string::operator==(string &p)
{
if(p.ptr&&ptr)
{
if(!strcmp(ptr,p.ptr))return true;
}
else if(!(p.ptr||ptr))return true;
return false;
}
bool string::operator!=(const char *p)
{
if(p&&ptr)
{
if(!strcmp(ptr,p))return false;
}
else if(!(p||ptr))return false;
return true;
}
bool string::operator!=(string &p)
{
if(p.ptr&&ptr)
{
if(!strcmp(ptr,p.ptr))return false;
}
else if(!(p.ptr||ptr))return false;
return true;
}
bool string::operator!()
{
if(ptr)
{
if(*ptr)return false;
}
return true;
}
char string::operator[](unsigned long i)
{
return ptr;
}
unsigned long string::size()
{
return strlen(ptr);
}
void string::subString(string &p,int start,int finish)
{
if(ptr)
{
delete ptr;
ptr=0;
}
ptr=new char;
memcpy(ptr,&p.ptr,finish-start);
ptr=0;
}
char *string::getPointer()
{
return ptr;
}
[ 本帖最后由 yan 于 2007-12-2 21:53 编辑 ] 学C++不久,很少写过C++的代码,请大虾看看,哪些地方需要纠正,意见和建议都可以提出来。 两个string.h...尽量不要和知名文件同名,以免混淆。
貌似就做了些运算符重载,实用方法不是很多啊,string的话基本常用了除了sub以外还有很多呢,replace、trim、indexof、charAt等等,都能实现最好啦。 LS说的是,但是代码对不对呢,有没有更好的方法? 那个啥,我记不清楚了,是不是应该用:
delete[] ptr;
? 哦,可能是我记错了。 同6#
delete[]
页:
[1]