• 蛋疼芜鄙写的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;
    }
  • 相关阅读:
    python读取excel保存到mysql
    python读取mysql返回json
    在C#后台使用MD5值对文件进行加
    使用文件流的形式上传大文件
    IE8兼容性问题
    解决 CentOS 下找不到库文件的问题
    openssl/ossl_typ.h:没有那个文件或目录
    解决 VSCode 进行 C/C++ 开发时 gcc 依赖缺失问题
    VSCode 中进行 C/C++ 开发需要的配置文件
    记一下使用 WeBASE 搭建自己的联盟链过程
  • 原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/3162159.html
Copyright © 2020-2023  润新知