我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 我写的String类 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ unit /'ju:nit/ n. 单位,部队,单元,部件,(作为计量标准的)单位 ]


我写的String类

string.h
Copy code
#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);
    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();
    int atoi();
};
#endif


string.cpp
Copy code
#include <string.h>
#include <ctype.h>
#include "string.h"

string::string(const char *p)
{
    ptr=new char[strlen(p)+1];
    strcpy(ptr,p);
}

string::string(string &p)
{
    ptr=new char[strlen(p.ptr)+1];
    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[strlen(p)+1];
        strcpy(ptr,p);
    }
    return *this;
}

string &string::operator=(string &p)
{
    if(ptr)
    {
        delete []ptr;
        ptr=0;
    }
    if(p.ptr)
    {
        ptr=new char[strlen(p.ptr)+1];
        strcpy(ptr,p.ptr);
    }
    return *this;
}

string &string::operator+=(const char *p)
{
    char *tmp;

    if(p)
    {
        if(ptr)
        {
            tmp=new char[strlen(ptr)+strlen(p)+1];
            strcpy(tmp,ptr);
            delete []ptr;
        }
        else tmp=new char[strlen(p)+1];
        strcat(tmp,p);
        ptr=tmp;
    }
    return *this;
}

string &string::operator+=(string &p)
{
    char *tmp;

    if(p.ptr)
    {
        if(ptr)
        {
            tmp=new char[strlen(ptr)+strlen(p.ptr)+1];
            strcpy(tmp,ptr);
            delete []ptr;
        }
        else tmp=new char[strlen(p.ptr)+1];
        strcat(tmp,p.ptr);
        ptr=tmp;
    }
    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[i];
}

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[finish-start+2];
    memcpy(ptr,&p.ptr[start],finish-start+1);
    ptr[finish-start+1]=0;
}

char *string::getPointer()
{
    return ptr;
}

int string::atoi()
{
    char c;
    int rad;
    int sum = 0;
    char *p = ptr;

    if (p)
    {
        if (*p == '0')
        {
            if (tolower(*(p + 1)) == 'x')
            {
                rad = 16;
                p += 2;
            }
            else
            {
                rad = 8;
                p++;
            }
        }
        else rad = 10;
        while (isxdigit(*p))
        {
            if (isdigit(*p))
                c = *p - '0';
            else
                c =tolower(*p) - 'a' + 10;
            sum = sum * rad + c;
            p++;
        }
    }
    return sum;
}

功能比较简陋。
看看是不是这样写的啊?
本帖最近评分记录:
  • 浮云:10(zhd32) 支持原创~~
  • 顶端 Posted: 2007-12-10 12:42 | [楼 主]
    依然随意



    性别: 帅哥 状态: 该用户目前不在线
    等级: 前途无量
    家族: ⊙JAY菊爱园⊙
    发贴: 5922
    威望: 0
    浮云: 760
    在线等级:
    注册时间: 2006-09-25
    最后登陆: 2022-10-30

    5come5帮你背单词 [ all /o:l/ a. 全部的,整个的,非常的,极度的;ad. 完全地,十分地;pron全体,一切 ]


    记得我当年雪C++就是从编string类开始的。
    顶端 Posted: 2007-12-10 23:07 | [1 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.009752(s) query 6, Time now is:11-22 09:22, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号