yan 发表于 2007-12-2 21:49:53

我写的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 编辑 ]

yan 发表于 2007-12-2 21:50:47

//===============================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 编辑 ]

yan 发表于 2007-12-2 21:55:54

学C++不久,很少写过C++的代码,请大虾看看,哪些地方需要纠正,意见和建议都可以提出来。

JAY 发表于 2007-12-3 05:15:46

两个string.h...尽量不要和知名文件同名,以免混淆。
貌似就做了些运算符重载,实用方法不是很多啊,string的话基本常用了除了sub以外还有很多呢,replace、trim、indexof、charAt等等,都能实现最好啦。

yan 发表于 2007-12-3 10:16:23

LS说的是,但是代码对不对呢,有没有更好的方法?

Eastsun 发表于 2007-12-3 14:11:26

那个啥,我记不清楚了,是不是应该用:
delete[] ptr;
?

yan 发表于 2007-12-3 21:00:21

哦,可能是我记错了。

Lendy 发表于 2007-12-4 00:14:54

同6#
delete[]
页: [1]
查看完整版本: 我写的string类