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.思维导图

相关推荐
树下水月15 分钟前
python 连接hive2 数据库
开发语言·数据库·python
Tom4i16 分钟前
Kotlin 中的 inline 和 reified 关键字
android·开发语言·kotlin
怕什么真理无穷16 分钟前
C++_面试15_零拷贝
c++·面试·职场和发展
凄戚20 分钟前
bash和命令
开发语言·chrome·bash
Evan芙22 分钟前
Bash 变量命名规则与类型使用
linux·运维·开发语言·chrome·bash
Espresso Macchiato23 分钟前
Leetcode 3748. Count Stable Subarrays
算法·leetcode·职场和发展·leetcode hard·leetcode 3748·leetcode周赛476·区间求和
AA陈超25 分钟前
ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
c++·笔记·学习·ue5·虚幻引擎
大袁同学27 分钟前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
在人间负债^40 分钟前
Rust 实战项目:TODO 管理器
开发语言·后端·rust