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

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

yan



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

5come5帮你背单词 [ advice /əd'vais/ 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 | [楼 主]
    绿豆沙冰



    性别: 帅哥 状态: 该用户目前不在线
    头衔: 净宝宝乖~~
    等级: 人见人爱
    家族: 单身贵族
    发贴: 3993
    威望: 0
    浮云: 973
    在线等级:
    注册时间: 2006-09-20
    最后登陆: 2011-09-06

    5come5帮你背单词 [ loosen /'lu:sn/ v. 解开,放松,松驰 ]


    干哈子用的。看不懂
    顶端 Posted: 2007-12-10 12:44 | [1 楼]
    笨笨



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: YD一族
    发贴: 2815
    威望: 0
    浮云: 1123
    在线等级:
    注册时间: 2006-06-09
    最后登陆: 2008-06-28

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


    到底要干什么啊,我看不懂
    顶端 Posted: 2007-12-10 12:46 | [2 楼]
    yan



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

    5come5帮你背单词 [ sweep /swi:p/ vt. 扫,打扫,(风)吹,(浪等)冲;vi. 快速移动,扫描 ]


    库里的string类看不懂,自己写了个自己用。不知道是不是这样写啊?求达人看看。
    顶端 Posted: 2007-12-10 12:47 | [3 楼]
    zhd32



    性别: 帅哥 状态: 该用户目前不在线
    等级: 版主
    家族: YD一族
    发贴: 619
    威望: 0
    浮云: 543
    在线等级:
    注册时间: 2006-04-22
    最后登陆: 2009-06-22

    5come5帮你背单词 [ large /la:d3ə/ a. 大的;大(只用于短语) ]


    代码风格需要改进下
    顶端 Posted: 2007-12-10 22:33 | [4 楼]
    依然随意



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

    5come5帮你背单词 [ sleeve /sli:v/ n. 衣袖 ]


    记得我当年雪C++就是从编string类开始的。
    顶端 Posted: 2007-12-10 23:07 | [5 楼]
    yan



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

    5come5帮你背单词 [ employ /im'ploi/ vt. & n. 使用,雇用 ]


    Quote:
    引用第4楼zhd32于2007-12-10 22:33发表的  :
    代码风格需要改进下

    代码风格正在改变(看了高质量编程后)。
    string类是这样写吧?
    顶端 Posted: 2007-12-11 18:00 | [6 楼]
    wan520





    性别: 帅哥 状态: 该用户目前不在线
    等级: 希望之光
    发贴: 1724
    威望: 0
    浮云: 1125
    在线等级:
    注册时间: 2006-02-20
    最后登陆: 2010-11-04

    5come5帮你背单词 [ riddle /'ridl/ n. 谜,谜语,难解的问题,难理解的人、物或情况 ]


    代码有些异常情况没处理哈!多看看高质量编程吧!
    顶端 Posted: 2007-12-12 08:44 | [7 楼]
    yan



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

    5come5帮你背单词 [ midday /'middei/ n. 正午,中午 ]


    是说new的时候没检查指针是否为null么?
    顶端 Posted: 2007-12-12 12:30 | [8 楼]
    我来我网·5come5 Forum » 程序员之家

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