C++ 9.24

news2024/9/25 13:24:03

作业一:将昨天的My_string类中的所有能重载的运算符全部进行重载+、[] 、>、=、<、==、>=、<=、!=、+=(可以加等一个字符串,也可以加等一个字符)、输入输出>>、<<。

main.cpp

#include <iostream>
#include "zuoye.h"
 
using namespace std;
 
 
int main()
{
 
//        My_string str("aassddffgghhjjkkll"); // 使用 C 字符串初始化
//        str.push_back('q'); // 尾插字符
//        std::cout << "输出为: " << str.data() << std::endl; // 输出:
//        std::cout << "实际长度: " << str.get_length() << std::endl; // 输出  实际长度
//        std::cout << "总长度: " << str.get_size() << std::endl; // 输出总长度
 
//        str.pop_back(); // 尾删字符
//        std::cout << "删除后的数据为: " << str.data() << std::endl; // 输出: Hello
//        str.clear(); // 清空字符串
//        std::cout << "清空后的内容为 " << str.data() << std::endl; // 输出: (空字符串)
        My_string str_1("hello ");
        My_string str_2("world ");
        My_string str_3=str_1+str_2;
        std::cout << "拼接后的字符串为: " << str_3.show() << std::endl; // 输出拼接后的字符串
        cout<<str_3[4]<<endl;
        cout<<(str_1>str_2)<<endl;
        cout<<(str_1>=str_2)<<endl;
        cout<<(str_1<=str_2)<<endl;
        cout<<(str_1<str_2)<<endl;
        cout<<(str_1==str_2)<<endl;
        cout<<(str_1!=str_2)<<endl;
        return 0;
 
 
}

zuoye.cpp

#include "zuoye.h"
#include <cstring>
 
 
//无参构造
My_string::My_string():size(15)
{
    this->ptr = new char[size];
    this->ptr[0] = '\0';            //表示串为空串
    this->len = 0;
}
 
//有参构造
//1 从字符串构造的构造函数
My_string::My_string(const char *src)
{
    len =strlen(src); //计算字符串换长度
    size=len+1;         //+1 留出终止符
    ptr=new char[size];  //分配字符数组
    strcpy(ptr,src);    //添加字符串到数组
}
//2 从字符和数量构造的构造函数
My_string::My_string(int num, char value)
{
    size=num+1;  //+1留出终止符
    len=num;       //实际长度
    ptr=new char[size];
    for(int i=0;i<len;i++)
    {
        ptr[i]=value;
    }
    ptr[len]='\0';
 
}
//拷贝构造
My_string::My_string(const My_string& other)
{
    this->size=other.size;
    this->len=other.len;
    this->ptr=new char[this->size];
    strcpy(ptr,other.ptr);
}
//拷贝赋值
My_string& My_string::operator=(const My_string & other)
{
    if(this!=&other)
    {
        delete[]ptr; //释放原有内存
        this->size=other.size;
        this->len=other.len;
        this->ptr=new char[this->size];
        strcpy(this->ptr,other.ptr);
    }
    return *this;
}
//析构函数
    My_string::~My_string()
{
    delete [] this->ptr;    //释放内存
}
    //判空
    bool My_string::is_empty()const
    {
        return  len==0;
    }
    //尾插
void My_string::push_back(char value)
{
if (len + 1 >= size)
        {
           // 扩容
          my_resize(size * 2);
       }
 
        ptr[len++]=value;  //加入字符
        ptr[len]='\0';
 }
    //尾删
void My_string::pop_back()
    {
     if(len>0)  //判断是否可以删除
     {
         len--;   //长度-1
         ptr[len]='\0';
     }
    }
 //at函数实现
char & My_string::at(int index)
{
    if(index>=0&&index<size)
    {
        return  ptr[index];
    }
    else{
        cout<<"超出范围 "<<endl;
        exit(1);   //终止程序
    }
}
 
    //清空函数
void My_string:: clear()
    {
        this->len=0; //重置长度
        ptr[0]='\0';  //置空
 
    }
 
 
    //返回C风格字符串
 char * My_string::data()
 {
     return ptr;
 }
    //返回实际长度
    int My_string::get_length()
    {
        return len;
    }
    //返回当前最大容量
    int My_string::get_size()
    {
        return  size;
    }
 
    //君子函数:二倍扩容
void My_string::my_resize(int new_size)
{
        char* new_ptr = new char[new_size]; // 动态分配新数组
        strcpy(new_ptr, ptr); // 复制旧数据
        delete[] ptr; // 释放旧内存
        ptr = new_ptr; // 更新指针
        size = new_size; // 更新大小
 }
char * My_string::show()
{
    return ptr;
}
// 定义 + 运算符重载函数
My_string My_string::operator+(const My_string &R)const
{
    My_string new_ptr(this->len+R.len,' ');
    strcpy(new_ptr.ptr,this->ptr);
    strcat(new_ptr.ptr,R.ptr);
    new_ptr.len=this->len+R.len;
    return  new_ptr;
}
// 定义[] 运算符重载函数
char& My_string::operator[](int a)
{
    return  at(a);
}
 
bool My_string::operator>(const My_string& other) const {
    return strcmp(ptr, other.ptr) > 0; // 字符串比较
}
 
bool My_string::operator<(const My_string& other) const {
    return strcmp(ptr, other.ptr) < 0; // 字符串比较
}
 
bool My_string::operator==(const My_string& other) const {
    return strcmp(ptr, other.ptr) == 0; // 字符串比较
}
 
bool My_string::operator>=(const My_string& other) const {
    return !(*this < other); // 使用 < 运算符
}
 
bool My_string::operator<=(const My_string& other) const {
    return !(*this > other); // 使用 > 运算符
}
 
bool My_string::operator!=(const My_string& other) const {
    return !(*this == other); // 使用 == 运算符
}
 

zuoye.h

#include <iostream>
#ifndef TEXT_H
#define TEXT_H
 

using namespace std;
 
 
class My_string
{
private:
    char *ptr;         //指向字符数组的指针
    int size;           //字符串的最大容量
    int len;            //字符串当前容量
 
 
public:
     //无参构造
    My_string();
     //有参构造
    My_string(const char* src);
    My_string(int num, char value);
 
    //拷贝构造
    My_string(const My_string& other);
    //拷贝赋值
    My_string& operator=(const My_string & other);
    //析构函数
  ~My_string();
    //判空
    bool is_empty()const;
    //尾插
    void push_back(char value);
    //尾删
    void pop_back();
    //at函数实现
    char &at(int index);
    //清空函数
    void clear();
    //返回C风格字符串
    char *data();
    //返回实际长度
    int get_length();
    //返回当前最大容量
    int get_size();

    // 扩容函数,动态扩展字符串的容量
    void my_resize(int new_size);
    char * show();
    // + 运算符
    My_string operator+(const My_string &R)const;
    // [] 运算符
    char& operator[](int a);
    // > 运算符
    bool operator>(const My_string& other) const ;
    // < 运算符
    bool operator<(const My_string& other) const;
    // == 运算符
    bool operator==(const My_string& other) const;
    // >= 运算符
    bool operator>=(const My_string& other) const ;
    // <= 运算符
    bool operator<=(const My_string& other) const ;
    // != 运算符
    bool operator!=(const My_string& other) const ;
};
 
#endif 

Xmind

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为昇腾系列-jupyter安装torch_npu

使用背景 国产算力的兴起&#xff0c;异构算力成为各大厂商的选择&#xff0c;以摆脱对英伟达算力过大的依赖&#xff0c;保障算力安全。本文将会讲解如何使用昇腾算力卡来制作一个镜像&#xff0c;然后交给k8s进行算力调度&#xff0c;显示国产算力的真正应用落地。 安装步骤…

微服务配置管理——动态路由

动态路由 网关的路由配置全部是在项目启动时由org.springframework.cloud.gateway.route.CompositeRouteDefinitionLocator在项目启动的时候加载&#xff0c;并且一经加载就会缓存到内存中的路由表内&#xff08;一个Map&#xff09;&#xff0c;不会改变。也不会监听路由变更新…

创建游戏暂停菜单

创建用户控件 设置样式 , 加一层 背景模糊 提升UI菜单界面质感 , 按钮用 灰色调 编写菜单逻辑 转到第三人称蓝图 推荐用 Set Input Mode Game And UI , 只用仅UI的话 增强输入响应不了 让游戏暂停的话也可以用 Set Game Paused , 打勾就是暂停 , 不打勾就是继续游戏 , 然后…

0基础如何转行IT

这是一个学习为王的时代&#xff0c;你没有超强的主动学习能力&#xff0c;很容易在千军万马的竞争中落后&#xff0c;甚至被优秀的替代者淘汰。 小白如何转行IT 正所谓业精于专&#xff0c;相较于科班生&#xff0c;非科班转行的在基础方面确实比较薄弱&#xff0c;因此必须…

VMWare虚拟机键盘卡顿

文章目录 环境问题解决办法参考 环境 Windows 11 家庭中文版VMware Workstation 17 ProUbuntu 24.04.1 问题 最近新入手了一台电脑台式机&#xff0c;型号是联想拯救者刃7000K&#xff0c;自带Win11家庭版。主机的CPU是第14代英特尔酷睿i9处理器&#xff0c;异构24核32线程。…

ubuntu 安装minikube,并拉取k8s镜像

虚拟机是vmware17, 系统是ubuntu20.4&#xff0c; minikube是1.23.1&#xff0c; docker是24.0.7&#xff0c; 为什么要装minikube&#xff0c;通常k8s集群是要3台机子以上&#xff0c;而通过minikube&#xff0c;可以在一台机子上搭建出k8s集群&#xff0c;minikube采用的是D…

unraid使用docker安装redis并创建密码

unraid使用docker安装redis并创建密码 一、redis简单介绍 redis基于K-V思路&#xff0c;数据存储在内存中&#xff0c;速度快&#xff0c;高效。 使用时会结合其他数据库如mysql。 二、redis安装 应用市场搜索redis&#xff0c;找下载量最高的一个即可&#xff0c;其中参数只…

5--SpringBoot项目中菜品管理 详解(一)

目录 公共字段自动填充 问题分析 实现思路 代码开发 步骤一 步骤二 功能测试 新增菜品 需求分析和设计 代码开发 文件上传接口 功能测试 公共字段自动填充 问题分析 后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置…

C语言特殊字符串函数和字符函数

特殊字符串函数 strtok(字符串切割函数) 重点&#xff1a;1.delimiters 参数是个字符串&#xff0c;定义了用作分割符的字符集合 2.第一个参数指定一个字符串&#xff0c;里面包含0个或者多个分隔符 3.strtok函数找到str中的分隔符&#xff0c;会把它改成\0&#xff0c;然后…

内衣洗衣机哪个牌子好用?五款业内口碑爆棚产品汇总

内衣裤洗衣机是一种非常实用的洗衣机&#xff0c;可以有效地保护内衣和贴身衣物的质量和卫生&#xff0c;相比于普通的家用大型洗衣机&#xff0c;内衣裤洗衣机在容量、洗涤方式、控制方式和价格等方面有很大的不同之处&#xff0c;如果您经常需要清洗内衣和贴身衣物&#xff0…

无人机蜂群作战会成为未来战争的主要形式吗,该如何反制呢?

无人机蜂群作战在未来战争中确实有可能成为一种重要的作战形式&#xff0c;但是否会成为“主要形式”则取决于多种因素&#xff0c;包括技术发展、战术创新、战略需求以及国际政治和军事格局的变化等。以下是对无人机蜂群作战及其反制措施的详细分析&#xff1a; 一、无人机蜂…

图神经网络(GNN)简单介绍

参考文章:A Gentle Introduction to Graph Neural Networks 仅作为自己学习的笔记 GNN应用领域&#xff1a; 芯片设计 场景分析与问题分析 推荐系统&#xff08;类似抖音&#xff09; 欺诈检测&#xff0c;风控相关 知识图谱 道路交通&#xff0c;动态流量预测 自动驾驶&…

程序员的得力助手:Kimi AI的实战体验引言

引言 作为一名程序员&#xff0c;我们经常需要处理大量信息&#xff0c;从代码调试到文档编写&#xff0c;再到团队协作&#xff0c;每一项任务都需要我们保持高度的专注和效率。在这个过程中&#xff0c;一个得力的助手可以极大地提升我们的工作效率。今天&#xff0c;我想和…

洛谷P2571.传送带

洛谷P2571.传送带 三分模板题 用于单峰函数求极值 一定可以将答案路径分成三段即AE - EF - FD (E和A可能重复&#xff0c;F和D可能重合) E在线段AB上&#xff0c;F在线段CD上 因为有两个不定点EF&#xff0c;因此假设E为参数&#xff0c;三分求F的位置再外层三分求E的位置 …

PMP--三模--解题--1-10

文章目录 9.资源管理1、 [单选] 项目已经准备好开工&#xff0c;资源已经配置好。开发经理随后通知项目经理&#xff0c;由于家庭紧急情况&#xff0c;关键资源不再可用。开发经理表示&#xff0c;所有其他开发人员都被分配到其他项目&#xff0c;任何开发人员都没有能力承担额…

Windows内核编程基础(1)

在前面的文章中&#xff0c;介绍了如何配置开发环境以及如何进行调试。 接下来的几篇文章&#xff0c;将会重点介绍内核编程中所需要了解的一些理论基础。 我写这个系列文章的主要目的是方便以后自己查阅&#xff0c;同时也给正在学习内核开发的小伙伴一些参考&#xff0c;所…

在线PDF转图片怎么转?4种简单转换的方法分享

在线PDF转图片怎么转&#xff1f;在线PDF转图片不仅简化了文档处理流程&#xff0c;还极大地提升了工作效率。无论是教师准备教学材料、学生整理笔记&#xff0c;还是职场人士分享报告&#xff0c;都能通过这一功能轻松实现PDF到图片的转换&#xff0c;确保内容的高清展示与便捷…

OLED(3)字库篇

文章目录 1 显示图片1.1 图片取模 2 字符集与编码2.1 字符编码2.2 ASCII2.3 中文编码2.3.1 GB2312 标准2.3.2 GBK 编码2.3.3 GB18030 2.4 Unicode 字符集和编码2.4.1 UTF-322.4.2 UTF-162.4.3 UTF-8 3 字库 DIY3.1 生成字库3.2 烧录到 W25Qxx 1 显示图片 1.1 图片取模 1&#…

【完整梳理验证】企业微信第三方应用接入全流程java版

企业微信第三方应用接入全流程java版 1. 概念与流程1.1 概念1、企业内部应用2、`第三方应用`3、代开发自建应用1.2 流程1.2.1 全局流程1.2.2 应用配置1.2.3 数据流程2. 核心文档2.1 理解第三方应用开发流程和概念2.1.1 应用开发阶段2.1.2 应用推广阶段2.1.3 基本流程1)前期应用…

【VUE_ruoyi-vue】基于ruoyi-vue框架实现简单的系统通用文件模块

基于ruoyi-vue框架&#xff0c;新增一个简单的系统通用文件模块&#xff0c;服务与各个模块涉及到文件上传信息的记录和相关展示 运行sql,创建数据库表 DROP TABLE IF EXISTS sys_file_info; CREATE TABLE sys_file_info (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,lin…