c++9月23日

1.My_string

头文件

复制代码
#ifndef MY_STRINGHEAD_H
#define MY_STRINGHEAD_H


#include <iostream>
#include <cstring>
using namespace std;

class My_string
{
private:
    char *ptr;//指向字符数组的指针
    int size;//字符数组的最大容量
    int len ;//当前字符串的长度
public:
    My_string()
    {
        this->size=15;
        this->len=0;
        this->ptr[len]='\0';
    }
    My_string(const char *src);//有参构造
    My_string(const My_string & other);//拷贝构造
    My_string & operator=(const My_string &other);
    ~My_string();//析构函数
    bool My_empty();//判空
    void push_back(char value);//尾插
    void pop_back();//尾删
    char * data ();
    char &at(int index);
    int get_len();
    int get_size();
    void Double_String();//双倍扩容
    void show();
};

#endif // MY_STRINGHEAD_H

功能函数

复制代码
#include "my_stringhead.h"
    My_string::My_string(const char *src)//有参构造
    {
        this->size = strlen(src);
        this->len=this->size;
        this->ptr = new char[this->size+1];
        strcpy(ptr,src);
    }
     My_string::My_string(const My_string & other):size(other.size),len(other.len)//拷贝构造
    {
        this->ptr = new char[this->size+1];
        strcpy(this->ptr,other.ptr);
    }
    My_string & My_string::operator=(const My_string &other)//拷贝赋值
    {
        if(this!=&other)
        {
            this->size = other.size;
            this->len = other.len;
            strcpy(this->ptr,other.ptr);
        }
        return *this;
    }
     My_string::~My_string()//析构函数
    {
        delete this->ptr;
    }
   bool My_string:: My_empty()//判空
    {
        return len==0;
    }
    void My_string:: push_back(char value)//尾插
    {
        this->size++;
        char *Newptr=new char[this->size];
        strcpy(Newptr,ptr);
        delete this->ptr;
        this->ptr=Newptr;
        this->ptr[this->len]=value;
        this->len++;
        this->ptr[this->len]='\0';
    }
    void My_string::pop_back()//尾删
    {
        this->size--;
        this->len--;
        this->ptr[this->len]='\0';
    }
    char & My_string::at(int index)
    {
        if(index>=0&&index<this->len)
        {
            return this->ptr[index];
        }
        else
        {
            cout<<"输入不合法"<<endl;
            exit(-1);
        }
    }
    char *My_string::data ()//转换为c风格字符串
    {
        return this->ptr;
    }
    int  My_string::get_len()
    {
        return this->len;
    }
    int My_string:: get_size()
    {
        return this->len;
    }
    void My_string::Double_String()//双倍扩容
    {
        if(this->len+1>=this->size)
        {
            this->size*=2;
            char *Newptr=new char[this->size];
            strcpy(Newptr,ptr);
            delete this->ptr;
            this->ptr=Newptr;
        }
    }
    void My_string:: show()
    {
        cout<<this->ptr<<endl;
    }

主函数

复制代码
#include "my_stringhead.h"

int main()
{
    My_string str("hello world");
    str.show();
    My_string str1;
    str1.operator = (str);
    str1.show();
    return 0;
}

2.思维导图

相关推荐
liulilittle11 分钟前
LinkedList 链表数据结构实现 (OPENPPP2)
开发语言·数据结构·c++·链表
无聊的小坏坏30 分钟前
三种方法详解最长回文子串问题
c++·算法·回文串
长路 ㅤ   41 分钟前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
山河木马1 小时前
前端学习C++之:.h(.hpp)与.cpp文件
前端·javascript·c++
2401_891957311 小时前
list的一些特性(C++)
开发语言·c++
秋说1 小时前
【PTA数据结构 | C语言版】两枚硬币
c语言·数据结构·算法
二十雨辰1 小时前
[尚庭公寓]07-Knife快速入门
java·开发语言·spring
Python大数据分析@1 小时前
Origin、MATLAB、Python 用于科研作图,哪个最好?
开发语言·python·matlab
qq_513970441 小时前
力扣 hot100 Day37
算法·leetcode
编程零零七1 小时前
Python巩固训练——第一天练习题
开发语言·python·python基础·python学习·python练习题