zoukankan      html  css  js  c++  java
  • 编写String类

    string.cpp

    /*
    String 类
    */
    
    
    class String
    {
        public:
            String(const char*str=NULL);    //构造函数
            String(const String &str);      //拷贝构造函数
            ~String();                      //析构函数
            String operator+(const String& str) const;  //重载+
            String& operator=(const String &str);        //重载=
            String& operator+=(const String &str);        //重载+=
            bool operator==(const String &str) const;    //重载==
            char &operatorp[](int n) const;              //重载 []
    
            size_t size() const;                         // 获取长度
            const char* c_str() const;                   //获取 C 字符段长度
            friend istream& operator>> (istream &is, String &str);  //输入
            friend istream& operator<< (ostream &os, String &str);  //输入
        private:
            char *data;
            size_t length;
    }
    
    String::String(const char*str=NULL)
    {
        if (!str){
            length = 0;
            data = new char[1];
            *data = '';
        }
        else{
            length = strlen(str);
            data = new char[length+1];
            strcpy(data, str);
        }
    }
    
    String::String(const String &str)
    {
        length = str.size();
        data = new char[length + 1];
        strcpy(data, str.c_str());
    }
    
    String::~String()
    {
        delete []data;
        length = 0;
    }
    
    String String::operator+(const String& str) const
    {
        string newString;
        newString.length = length + str.size();
        newString.data = new char[newString.length + 1];
        strcpy(newString.data, data);
        strcat(newString.data, str.data);
        return newString;
    }
    
    String& String::operator=(const String &str)
    {
        if (this == str){
            return *this;
        }
    
        delete[] data;
        length = str.length;
        data = new char[length+1];
        strcpy(data, str.c_str());
        return *this;
    }
    
    String& String::operator+=(const String &str)
    {
        length += str.length;
        char *newData = new char[length+1];
        strcpy(newData, str.c_str());
        strcat(newData, str.data);
    
        delete[] data;
        data = newData;
        return *this;
    }
    
    inline String::operator==(const String &str) const
    {
        if (length != str.length){
            return false;
        }
        return strcmp(data, str.data) ? false : true;
    }
    
    inline char& String::operatorp[](int n) const; 
    {
        if (n >= length){
            return data[length-1];
        }
        else{
            data[n];
        }
    }
    
    inline size_t String::size() const
    {
        return length;
    }
    
    const char* String::c_str() const
    {
        return data;
    }
    
    istream& operator>> (istream &is, String &str){
        char tmp[1000] = {0};
        is >> tem;
        str.length = strlen(tem);
        str.data = new char[str.length + 1];
        strcpy(str.data, tem);
        return is;
    }
    
    istream& operator<< (ostream &os, String &str)
    {
        os << str.data;
        return os;
    }
  • 相关阅读:
    nsis打包
    学习记录:ST表
    学习记录:快速幂
    学习记录:哈夫曼树
    学习记录:二叉树
    学习记录:康托展开 与 逆康托展开
    堆排序简介
    动态规划水题集
    lower_bound( ) 与 upper_bound( )
    琐碎的一点技巧
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/14742435.html
Copyright © 2011-2022 走看看