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;
    }
  • 相关阅读:
    转发与重定向的区别
    Servlet开发详讲
    Servlet的常见错误
    HTTP请求方式之POST和GET的区别
    Spring各种类型数据的注入
    Spring容器的基本使用
    Python接口自动化-测试用例编写
    Python接口自动化-设计测试用例
    python简明教程之数据结构(列表、元组、字典、集合)
    python简明教程之函数
  • 原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/3162159.html
Copyright © 2011-2022 走看看