zoukankan      html  css  js  c++  java
  • 蛋疼芜鄙写的String类的c++复制控制,打基础啊打基础,打了一辈子的基础

    这里只写了一点点,自己慢慢调试出来的,只包含了复制构造,赋值运算符和+ 的重载,希望蛋疼芜鄙的麻油看了之后抡锤子

    /**************String.h*****************/

    #include<stdio.h>
    //#include<memory.h>
    
    
    class String
    {
        private:
            char *m_data;
            int m_len;
            int  mystrlen(const char* str );
            char* mystrcat(char*DeStr,char *srStr);
        public:
            String(const char* str=NULL);
            String(const String &onestr);
            String &operator=(const String &onestr);
            ~String();
            int StrLen();
            String &operator+(const String &onestr);    
    };
     

    /************String.cpp**********************/

    #include"String.h"
    #include<malloc.h>
    int String:: mystrlen(const char * str)
    {
        int len = 0;
        while(*str)
        {
            len++;
            str++;
        }
        return len;
    }
    
    char* String::mystrcat(char* s1,char*s2)
    {
        int len = mystrlen(s1)+mystrlen(s2);
        char *str=(char*)malloc(len+1);
        for(int i=0;i<len;i++)
        {
            if(i<mystrlen(s1))
            {
                str[i]=s1[i];
            }
            if(i>=mystrlen(s1))
            {
                str[i]=s2[i-mystrlen(s1)];
            }
        }
        str[len]='';
        printf("str address %d
    ",str);
        return str;
    }
    int String::StrLen()
    {
        m_len = mystrlen(m_data);
        return m_len;
    }
    
    
    String::String(const char *str)
    {
        if(str == NULL)
        {
            return ;
        }
        int len = mystrlen(str);
        this->m_data = new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str,len);
    }
    
    String::String(const String& str)
    {
        int len=mystrlen(str.m_data);
        this->m_data=new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str.m_data,len);
    }
    
    String &String::operator=(const String& str)
    {
        if(this==&str)
        {
            delete [] m_data;
            return *this;
        }    
        int len=mystrlen(str.m_data);
        this->m_data=new char[len+1];
        this->m_len = len;
        memcpy(this->m_data,str.m_data,len);
        return *this;
    }
    
    String &String::operator+(const String& str1)
    {
        String *str = new String();
        str->m_len = mystrlen(this->m_data)+mystrlen(str1.m_data);
        str->m_data = new char[str->m_len+1];
        str->m_data = mystrcat(this->m_data,str1.m_data);
        printf("%s
    ",str->m_data);
        return *str;
    }
    
    String::~String()
    {
    //    printf("~~%s address: %d
    ",this->m_data,this->m_data);
        delete []m_data;
    }
  • 相关阅读:
    P4568 [JLOI2011]飞行路线(分层图)
    打地鼠游戏(贪心)
    雷神领域(并查集真是个好东西)并查集+流氓dp
    P2934 [USACO09JAN]安全出行
    P2893 [USACO08FEB]修路
    P2894 [USACO08FEB]酒店Hotel
    P4145 上帝造题的七分钟2 / 花神游历各国
    P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)
    P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
    day 2 上午 挂饰 背包
  • 原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/3162159.html
Copyright © 2011-2022 走看看