zoukankan      html  css  js  c++  java
  • string实现

    #include<iostream>
    using namespace std;
     
    class String{
        friend ostream& operator<< (ostream&,String&);
    public:
        String(const char* str=NULL);                //赋值构造兼默认构造函数(char)
        String(const String &other);                   //赋值构造函数(String)
        String& operator=(const String&other);         //operator=
        String operator+(const String &other)const;  //operator+
        bool operator==(const String&);              //operator==
        char& operator[](unsigned int);                 //operator[]
        size_t size(){return strlen(m_data);};
        ~String(void) {delete[] m_data;}
    private:
        char *m_data;
    };
    inline String::String(const char* str)
    {
        if (!str) m_data=0;
        else
        {
            m_data = new char[strlen(str)+1];
            strcpy(m_data,str);
        }
    }
    inline String::String(const String& other)
    {
        if(!other.m_data) m_data=0;
        else
        {
            m_data=new char[strlen(other.m_data)+1];
            strcpy(m_data,other.m_data);
        }
    }
    inline String& String::operator=(const String& other)
    {
        if (this!=&other)
        {
            delete[] m_data;
            if(!other.m_data) m_data=0;
            else
            {
                m_data = new char[strlen(other.m_data)+1];
                strcpy(m_data,other.m_data);
            }
        }
        return *this;
    }
    inline String String::operator+(const String &other)const
    {
        String newString;
        if(!other.m_data)
            newString = *this;
        else if(!m_data)
            newString = other;
        else
        {
            newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
            strcpy(newString.m_data,m_data);
            strcat(newString.m_data,other.m_data);
        }
        return newString;
    }
    inline bool String::operator==(const String &s)    
    {
        if ( strlen(s.m_data) != strlen(m_data) )
            return false;
        return strcmp(m_data,s.m_data)?false:true;
    }
    inline char& String::operator[](unsigned int e)
    {
        if (e>=0&&e<=strlen(m_data))
            return m_data[e];
    }
    ostream& operator<<(ostream& os,String& str)
    {
        os << str.m_data;
        return os;
    }
    void main()
    {
        String str1="Hello!";
        String str2="Teacher!";
        String str3 = str1+str2;
        cout<<str3<<"
    "<<str3.size()<<endl;
        cin.ignore(100, '
    ');
        cin.get();
    }
  • 相关阅读:
    [BZOJ2287]【POJ Challenge】消失之物(DP)
    [BZOJ1596] [Usaco2008 Jan]电话网络(树形DP || 贪心)
    [BZOJ3339] Rmq Problem(线段树)
    [BZOJ3378] [Usaco2004 Open]MooFest 狂欢节(树状数组)
    [BZOJ1595] [Usaco2008 Jan]人工湖(单调栈)
    [BZOJ1594] [Usaco2008 Jan]猜数游戏(二分 + 并查集)
    [POJ2778]DNA Sequence(AC自动机 + DP + 矩阵优化)
    [TyvjP1519] 博彩游戏(AC自动机 + DP)
    【模板】AC自动机
    [poj3744] Scout YYF I【概率dp 数学期望】
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/4219923.html
Copyright © 2011-2022 走看看