C++第四讲

这篇具有很好参考价值的文章主要介绍了C++第四讲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

思维导图

C++第四讲,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-594682.html

 仿照string类,实现myString类

/* 
   ---------------------------------
    @author:YoungZorn
    created on 2023/7/19 19:20.
   ---------------------------------
*/
#include<iostream>
#include<cstring>

using namespace std;

class myString
{
private:
    char *str;           //记录c风格的字符串
    int size;            //记录字符串的实际长度
public:
    //无参构造
    myString()
    {
        size = 10;
        str = new char[size];         //构造出一个长度为10的字符串
        strcpy(str,"");         //初始化myString对象str为空串
    }
    //有参构造
    myString(const char *s)          //string  s("hello world")
    {
        size = strlen(s);
        str = new char[size+1];   //末尾添加 '\0'
        strcpy(str, s);   //--->str = "hello world"
    }

    //拷贝构造
    myString(const myString & other):str(new char(*other.str)),size(other.size){}

    //析构函数
    ~myString(){delete str;}

    //拷贝赋值函数
    myString& operator=(const myString& other){
        if(this != &other){
            delete str;  //释放原有的内存
            this->size = other.size;
            this->str = new char(*(other.str));
        }
        return *this;
    }

    //判空函数
    bool isEmpty(){
        if(strcmp(str,"") == 0){
            return true;
        }
        return false;
    }

    //size函数
    int strSize(){
        if (isEmpty()){
            return -1;
        }
        return strlen(str);
    }

    //c_str函数
    const char *str_c_str()const{
        return str;   //返回一个C风格的字符串
    }

    //at函数
    char &at(int pos){
        if (isEmpty()){
            const int &ref = -1;
            return (char &)ref;
        }
        return str[pos];   //返回字符串下标的字符
    }

    //加号运算符重载  (+)
    const myString operator+ (const myString & R) const{
        int newSize = size + R.size;  //新字符串的长度
        char *newStr = new char[newSize+1];  //分配新字符串内存
        strcpy(newStr, this->str);
        strcat(newStr,R.str);
        return myString(newStr);
    }

    //加等于运算符重载 (+=)
    const myString operator+= (const myString & R){
        size += R.size;  //更新size
        strcat(this->str,R.str);  //将R.str追加到str上
        return myString(this->str);
    }

    //关系运算符重载 (>)
    bool operator> (const myString & R) const {
        int flag = strcmp(this->str,R.str);
        if (flag > 0)
            return true;
        return false;
    }
};

int main(){
    myString string1 = "hello";
    bool flag = string1.isEmpty();
    cout<<flag<<endl;

    cout<<string1.strSize()<<endl;

    cout<<"at[0]:"<<string1.at(0)<<endl;

    myString s1 = "qwe";
    myString s2 = "asd";

    cout<<(s1>s2)<<endl; //判断 s1 和 s2 的大小

    s1 += s2;
    cout<<"s1 += s2 = "<<s1.str_c_str()<<endl;  // +=
    cout<<s1.str_c_str()<<endl;

    myString s3 = "aaa";
    myString s4 = "bbb";

    myString s5 = s3 + s4;
    cout<<"s3 + s4 = "<<s5.str_c_str()<< endl;  // +

    return 0;
}

到了这里,关于C++第四讲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 60题学会动态规划系列:动态规划算法第四讲

    买卖股票相关的动态规划题目 文章目录 1. 买卖股票的最佳时机含冷冻期 2. 买卖股票的最佳时期含⼿续费 3. 买卖股票的最佳时机III 4. 买卖股票的最佳时机IV 力扣链接:力扣 给定一个整数数组 prices ,其中第    prices[i]  表示第  i  天的股票价格 。​ 设计一个算法计算出最

    2024年02月13日
    浏览(36)
  • 【数据结构第四讲(排序算法)】我不信教不会你

    大家好啊✨ 先简单介绍一下自己💎 本人目前大二在读,专业是计算机科学与技术。 写博客的目的是督促自己记好每一章节的笔记,同时也希望结交更多同仁,大家互相监督,一起进步!☀️ 👀在这篇博客中,将会进行七种( 直接插入排序,希尔排序,选择排序,堆排序,

    2024年02月11日
    浏览(43)
  • ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装

    本文是ElasticSearch第四讲:ElasticSearch和Kibana安装,主要介绍ElasticSearch和Kibana的安装。了解完ElasticSearch基础和Elastic Stack生态后,我们便可以开始学习使用ElastiSearch了。 安装ElasticSearch还是先要看下官方网站。 官方网站 官方2.x中文教程中安装教程 官方ElasticSearch下载地址 官方

    2024年02月08日
    浏览(43)
  • K8S第四讲 Kubernetes删除pod阻塞问题

    在Kubernetes中,当您尝试删除一个Pod时,可能会遇到Pod一直阻塞的情况。这通常是由于Pod正在运行或被其他资源(例如ReplicaSet或Deployment)控制而导致的。以下是一些可能的解决方案: 1: 确认Pod是否正在运行:在执行删除Pod命令之前,请先检查Pod的状态,确保它没有在运行中

    2024年02月05日
    浏览(68)
  • 第四讲—讲解GPIO_Write函数以及相关例程

    之前讲解了初学GPIO的几个函数,下面介绍又一个函数,此函数对所有端口进行操作 GPIO_Write函数,与上一篇里边讲解的其他函数相比,最大的特点是它可以对多个端口进行赋值操作。 先看函数定义: 第一个参数与之前一样,因为是对多个端口操作,我们以GPIOA的所有端口为例

    2024年02月16日
    浏览(35)
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 现实⽣活中的图像总存在畸变。原则上来说,针孔透视相机应该将三维世界中的直线投影成直线,但是当我们使⽤⼴⾓和鱼眼镜头时,由于畸变的原因,直线在图像⾥看起来是扭曲的

    2024年02月05日
    浏览(45)
  • 分布式系统第四讲:分布式锁及实现方案

    本文主要介绍分布式锁的概念和分布式锁的设计原则,以及常见的分布式锁的实现方式。

    2024年02月12日
    浏览(90)
  • 【Vue3 知识第四讲】数据双向绑定、事件绑定、事件修饰符详解

    什么是数据双向绑定? 当数据发生变化的时候,视图会相应的发生变化 当视图发生改变的时候,数据也会相应的同步变化 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus 权限系统-商城 个人博客地址 双向绑定的指令 ​ v-model 指令实现数据双向绑定 双向绑定使用场景 ​

    2024年02月09日
    浏览(69)
  • 【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所 有的数据点最为接近,即曲线拟合的最好(最小化损失函数) 【插值和拟合的区别】 插值算法中,得到的多项式f(x)要经过所有样本点。但

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包