C++&QT-模仿string类

2023-11-20

目录

1.mystring.h

2.mystring.cpp

3.mian.cpp

4.运行结果


1.mystring.h

#ifndef MYSTRING_H
#define MYSTRING_H


#include <cstring>

class MyString
{
private:
    char* str; // 保存C风格字符串地址
    int len; // 保存字符串的实际长度
public:
    // 无参构造函数
    MyString() : len(32){ // 给定默认初始大小
        str = new char[len]; // 堆区申请空间
        strcpy(str, ""); // 字符串赋空值
    }
    // 有参构造函数
    MyString(const char* s){
        len = strlen(s); // 计算外部字符串大小,不包含\0
        str = new char[len + 1]; // 堆区申请对应大小空间
        strcpy(str, s); // 拷贝字符串
    }
    // 析构函数
    ~MyString(){
        delete str; // 释放指针成员属性指向的堆空间
    }
    // 拷贝函数
    MyString(MyString &other) : len(other.len){
        str = new char[len + 1]; // 堆区申请对应大小空间
        strcpy(str, other.str); // 拷贝字符串
    }

    // 字符串判空函数
    bool empty();
    // 计算字符串实际长度函数
    int size();
    // 返回C风格字符串
    char* &c_str();
    // at函数
    char &at(int sub);

};


#endif // MYSTRING_H

2.mystring.cpp

#include "mystring.h"


bool MyString::empty(){
    return strlen(this->str) ? false : true;
}

int MyString::size(){
    return strlen(this->str);
}

char* &MyString::c_str(){
    return this->str;
}

char &MyString::at(int sub){
    return this->str[sub];
}

3.mian.cpp

#include <iostream>
#include "mystring.h"

using namespace std;

int main()
{
    // 有参构造函数
    MyString s1("hello");
    cout << "s1 = " << s1.c_str() << endl;

    // 拷贝构造函数
    MyString s2(s1);
    cout << "s2 = " << s2.c_str() << endl;

    // 判空
    if(s2.empty()){
        cout << "s2空" << endl;
    } else {
        cout << "s2非空" << endl;
    }

    // 计算大小
    cout << "s2大小= " << s2.size() << endl;

    // at函数
    s2.at(0) = 'H';
    cout << "s2 = " << s2.c_str() << endl;
    return 0;
}

4.运行结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++&QT-模仿string类 的相关文章

随机推荐

  • 一道面试题:JVM老年代空间担保机制

    面试问题 昨天面试的时候 面试官问的问题 什么是老年代空间担保机制 担保的过程是什么 老年代空间担保机制是谁给谁担保 为什么要有老年代空间担保机制 或者说空间担保机制的目的是什么 如果没有老年代空间担保机制会有什么不好 下面我们就带着这些问
  • Nuttx操作系统(三):构建模式

    1 1 Nuttx构建配置以及模式 Nuttx有三种不同的构建配置 FLAT构建 这种构建是所代码驻留在公共地址空间中 1 应用 内核以及board logic在一个flat地址环境中 2 所有的地址空间具有相同的属性 PROTECTED构
  • expected primary-expression before 'unsigned' 解决方案

    问题描述 语句result unsigned int 1 lt lt i 在本地可以编译运行 但是上传至LeetCode后出现编译错误 expected primary expression before unsigned 分析 语句太复杂
  • 【MedusaSTears】复杂定时任务SpringBoot+Quartz实例,解决jobclass如何注入一个service类,以及实现简单业务逻辑

    目录 吃水不忘挖井人系列 1 认识了解各种定时任务实现方式 2 本文主要参考 3 其他参考 一 业务需求 这里提一下我对 Scheduled和Quartz的一点小看法 如有误解还请指正 二 软件环境 java版本 SpringBoot版本
  • Ubuntu环境下使用APT安装Jenkins(详细教程)

    目录 1 安装JDK 1 1 使用APT查找已安装的JDK 1 2 若没有JDK11 则需要安装 2 使用war包或者APT两种安装方式 2 1 war包安装 推荐 方法简单 配置使用JDK 2 2 APT安装 3 配置Jenkins 3
  • 人工智能数学基础:利用导数判断函数单调性、凹凸性、极值、最值和描绘函数图形

    一 单调性判断定理 定理 设函数y f x 在 a b 上连续 在 a b 内可导 1 如果在 a b 内f x 0 且等号仅在有限多个点处成立 那么函数y f x 在 a b 上单调增加 2 如果在 a b 内f x 0 且等号仅在有限多
  • java 常见的异常大集合

    算术异常类 ArithmeticExecption 空指针异常类 NullPointerException 类型强制转换异常 ClassCastException 数组负下标异常 NegativeArrayException 数组下标越界异
  • Java多线程 - 线程池常用容量设置

    线程执行方式 线程的执行是由CPU进行调度的 一个CPU在 同一时刻只会执行一个线程 操作系统利用了时间片轮转的方式 CPU给每个任务都服务一定的时间 然后把当前任务的状态保存下来 再加载下一个任务的状态后 继续服务下一个任务 任务的保存及
  • Android Studio卸载以及安装教程

    手把手教学安卓安装 一 卸载教程 如果是第一次安装 直接看往下翻 1 先把Android Studio卸载2 将安装残余一起卸载 一定要卸载干净 否则在二次安装时会出现一大堆问题 a b c 好啦 到这里 所有的残余都已经删除干净 下面进入
  • opengl光线跟踪算法_计算机图形中的光线追踪(ray tracing)概念

    这是对MIT Foundation of 3D Computer Graphics第20章的翻译 本章讲解了光线追踪 ray tracing 技术的基础知识 本书内容仍在不断的学习中 因此本文内容会不断的改进 若有任何建议 请不吝赐教nin
  • centos7 网络不通?

    仅仅作为自己的笔记自己后续查看 1 首先我这里的vmvare 需要改成nat 模式 然后解决这个问题需要修改3个文件 1 etc sysconfig network 主机名 默认网关 DNS 2 etc sysconfig network
  • python 报错DataFrame object has no attribute dtype

    错误信息 DataFrame object has no attribute dtype 原因 在dataframe astype str 的列的数据类型有object类型 解决方法 将对象的列的数据先转成字符串
  • Lua和C++交互总结(很详细)

    出处 http blog csdn net shun fzll article details 39120965 一 lua堆栈 要理解lua和c 交互 首先要理解lua堆栈 简单来说 Lua和C c 语言通信的主要方法是一个无处不在的虚拟
  • Java中String类的使用(一):如何判断一个字符串中是否含有指定的字符或字符串

    这里我给大家介绍三种简单的方法 一 使用String类中的contains CharSequence s 方法 使用contains CharSequence s 方法时 当且仅当此字符串包含指定的字符或字符串时 返回 true 否则返回f
  • 【Android Studio】Design editor is unavailable until next gradle sync.如何解决?

    Design editor is unavailable until next gradle sync 如何解决 打开一个网上开源的下载文件 在查看安卓页面布局 也就是控件布局时 会出现一个bug Design editor is unav
  • MYSQL 8.0 及以上版本设置远程连接。

    卸载 在 Ubuntu 系统上彻底卸载 MySQL 8 0 可以按照以下步骤进行操作 停止 MySQL 服务 输入以下命令 sudo systemctl stop mysql 删除 MySQL 相关文件和文件夹 输入以下命令 sudo ap
  • 刷脸支付解决开店实体商家易守店难的难题

    刷脸成为了现实 各地实行刷脸的试点都取得成功 刷脸也就这样的走进我们的生活 不需要带手机 钱包 直接选择刷脸 当然 方便的还是无须等待排队 原本一个收银台需要配备一名收银员 所以考虑人力成本收银柜台数量是有限的 但是使用刷脸支付 商家可以同
  • python中类的函数的调用

    这里要考虑的重要事项是您正在使用的变量和 或函数名称的范围 全局范围意味着 一切都可以看到它 无论是在顶层 在函数内部 还是在一个类中的方法内部 本地范围意味着它已锁定在该块的上下文中 并且块外的任何内容都无法看到它 在 您的情况下 该块是
  • 使用JavaScript 将Json数据导出CSV文件

    原理 CSV文件格式单元格之间是通过 隔开的 CSV文件格式里 换行是通过 n实现的 从上面两条结论 我们只有把相应的数据转换成 和 n就可以了 但其实真正的答案应该是把相应的数据转换成 和 r n 为什么会这样 且让我一一道来 我们在编辑
  • C++&QT-模仿string类

    目录 1 mystring h 2 mystring cpp 3 mian cpp 4 运行结果 1 mystring h ifndef MYSTRING H define MYSTRING H include