【C++】将myString类中能够实现的操作都实现一遍

news2024/9/20 16:55:46

myString.h

#ifndef MYSTERAM_H
#define MYSTERAM_H
#include <iostream>
#include<cstring>
using namespace std;
class myString
{
private:
    char *str;  //字符串
    int size;   //字符串容量
    char error[20] = "error";
public:
    //无参构造
    myString():size(10)
    {
        size = 10;
        str = new  char[size]();
    }
    //有参构造
    myString(const char *s)
    {
        size = strlen(s);    //计算传入的字符串长度
        str = new char[size];//创建空间为strlen(s)的空间
        strcpy(str,s);       //拷贝形参给实参
    }
    //析构函数
    ~myString()
    {
        delete []str;
    }

    //为字符串赋值
    myString operator=(char *s);
    //访问指定字符,有边界检查
    char &at(int index);

    //访问指定字符
    char &operator[](int index)const;

    //返回指向字符串首字符的指针
    char *data()const;

    //返回字符串不可修改的C字符数组版本
    char c_str()const;

    //检查字符串是否为空
    bool empty();

    //返回字符数
    int mysize();

    //返回字符数
    int length();

    //返回当前对象分配的存储空间能保存的字符数量
    int capacity();

    //清空内容
    void clear();

    //后附字符到结尾
    bool push_back(char s);

    //移除末尾字符
    bool pop_back();

    //后附字符到结尾
    bool append(const char s);

    //后附字符到结尾
    myString &operator+=(const char s);

    //连接两个字符串或者一个字符串和一个字符
    myString &operator+(const char *s);

    //判断两个字符串是否相等
    bool operator==(const char *s);

    //判断两个字符串!=
    bool operator!=(const char *s);

    //判断两个字符串<
    bool operator<(const char *s);

    //判断两个字符串>
    bool operator>(char *s);

    //判断两个字符串<=
    bool operator<=(const char *s);

    //判断两个字符串>=
    bool operator>=(const char *s);



    //展示
    void show();

    friend ostream & operator<<(ostream &L,const myString &s);
    friend istream & operator>>(istream &in, myString &s);



};
//执行字符串的流输入
ostream & operator<<(ostream &L,const myString &s);

//执行字符串的流输出
istream & operator>>(istream &in, myString &s);

#endif // MYSTERAM_H

myString.cpp

#ifndef MYSTERAM_H
#define MYSTERAM_H
#include <iostream>
#include<cstring>
using namespace std;
class myString
{
private:
    char *str;  //字符串
    int size;   //字符串容量
    char error[20] = "error";
public:
    //无参构造
    myString():size(10)
    {
        size = 10;
        str = new  char[size]();
    }
    //有参构造
    myString(const char *s)
    {
        size = strlen(s);    //计算传入的字符串长度
        str = new char[size];//创建空间为strlen(s)的空间
        strcpy(str,s);       //拷贝形参给实参
    }
    //析构函数
    ~myString()
    {
        delete []str;
    }

    //为字符串赋值
    myString operator=(char *s);
    //访问指定字符,有边界检查
    char &at(int index);

    //访问指定字符
    char &operator[](int index)const;

    //返回指向字符串首字符的指针
    char *data()const;

    //返回字符串不可修改的C字符数组版本
    char c_str()const;

    //检查字符串是否为空
    bool empty();

    //返回字符数
    int mysize();

    //返回字符数
    int length();

    //返回当前对象分配的存储空间能保存的字符数量
    int capacity();

    //清空内容
    void clear();

    //后附字符到结尾
    bool push_back(char s);

    //移除末尾字符
    bool pop_back();

    //后附字符到结尾
    bool append(const char s);

    //后附字符到结尾
    myString &operator+=(const char s);

    //连接两个字符串或者一个字符串和一个字符
    myString &operator+(const char *s);

    //判断两个字符串是否相等
    bool operator==(const char *s);

    //判断两个字符串!=
    bool operator!=(const char *s);

    //判断两个字符串<
    bool operator<(const char *s);

    //判断两个字符串>
    bool operator>(char *s);

    //判断两个字符串<=
    bool operator<=(const char *s);

    //判断两个字符串>=
    bool operator>=(const char *s);



    //展示
    void show();

    friend ostream & operator<<(ostream &L,const myString &s);
    friend istream & operator>>(istream &in, myString &s);



};
//执行字符串的流输入
ostream & operator<<(ostream &L,const myString &s);

//执行字符串的流输出
istream & operator>>(istream &in, myString &s);

#endif // MYSTERAM_H

main.cpp

#include <mySteram.h>

int main()
{
    myString s;//无参构造
    cout<<"字符串长度"<<s.length()<<endl;
    cout<<"字符串长度"<<s.mysize()<<endl;
    cout<<"开辟空间大小"<<s.capacity()<<endl;
    cout<<"*****************************************"<<endl;
    myString ss("zhenxinye");//有参构造
    ss.show();
    cout<<ss.length()<<endl;
    cout<<ss.mysize()<<endl;
    cout<<"开辟空间大小"<<ss.capacity()<<endl;
    cout<<"*****************************************"<<endl;
    cout<<"结尾加上字符 a ";
    ss.append('a');
    ss.show();
    cout<<"*****************************************"<<endl;
    cout<<"结尾加上字符 a ";
    ss.append('a');
    ss.show();
    cout<<"*****************************************"<<endl;
    cout<<"结尾加上字符 b ";
    ss+='b';
    ss.show();
    cout<<"*****************************************"<<endl;
    cout<<"删除最后一个字符:";
    ss.pop_back();
    ss.show();
    cout<<"*****************************************"<<endl;
    cout<<"拼接字符串 hello world:";
    ss = ss+" hello world";
    ss.show();
    cout<<"*****************************************"<<endl;
    cout<<"ss == zhenxinyeaa hello world?"<<endl;
    ss == "zhenxinyeaa hello world";
    cout<<"*****************************************"<<endl;
    cout<<"cout<<ss "<<ss;
    cout<<"*****************************************"<<endl;
    cout<<"cin>>ss "<<endl;
    cin>>ss;
    cout<<"--------"<<endl;
    ss.show();
    return 0;
}

效果展示

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

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

相关文章

23 - 模块独立编译的支持

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 模块独立编译的支持1.1 问题1.2 背景1.3 解决方案1.4 关键技术点 2. makefile 中的代码复用3. 实验 1. 模块独立编译的支持 1.1 问题 一般而言&#xff0c;不同工程师负责不同模块的开发&#xff0c;编译环境中如何支持模块的…

【计算机网络复习资料】

自己整理的&#xff0c;是根据我们学院老师所说重点&#xff0c;请自行甄别。 一、简答题&#xff1a; 计算机网络&#xff1a;由若干节点和连接这些节点的链路组成。 计算机网络体系结构&#xff1a;计算机网络的各层及其协议的集合。 tcp/ip体系结构&#xff1a;五个层次…

14 大模型微调-KitTrain

1 介绍 如何降低占用的显存&#xff1a; 梯度累计&#xff1a;在一个完整的模型更新周期&#xff08;epoch&#xff09;中&#xff0c;将多个小批量&#xff08;mini-batches&#xff09;的数据的梯度进行累加&#xff0c;然后在一个较大的批量&#xff08;累积步数&#xff…

MYSQL基础练习题 619.只出现一次的最大数字 (力扣)

619.单一数字 是在 MyNumbers 表中只出现一次的数字。 找出最大的 单一数字 。如果不存在 单一数字 &#xff0c;则返回 null 题目链接&#xff1a; https://leetcode.cn/problems/biggest-single-number/ 建表插入数据&#xff1a; Create table If Not Exists MyNumber…

4个方法快速恢复电脑删除文件

随着电脑的普及&#xff0c;我们越来越多地将重要数据存储在电脑中。然而&#xff0c;数据丢失的风险也随之增加。当您意外删除文件、格式化硬盘或遇到系统崩溃等情况时&#xff0c;如何恢复丢失的数据成为了一个待解决的问题。 一、回收站恢复 首先&#xff0c;最简单的恢复方…

心理咨询展示型网站渠道拓展服务

心理问题长期以来都受到关注&#xff0c;每个城市里也都有相关服务商家&#xff0c;除了进店外&#xff0c;线上也可以开展咨询服务&#xff0c;对需求者来说需要找到靠谱的品牌&#xff0c;而商家也需要触达到更多客户获取转化。 网站是品牌线上工具&#xff0c;利于商家通过…

搭建nmt部署考试系统

搭建nmt nginx --下载镜像&#xff0c;启动镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html --启动服务 --前后端分离的项目&#xff0c;并非所有的请求都是来自与同一个位置&#xff0c;设置请求的时候还是需要在hosts文件中挟持域名 --域名是…

如何通过选择合适的编程工具来提升编程效率

前言 在现代软件开发中&#xff0c;选择合适的编程工具和环境至关重要&#xff0c;它们能够帮助开发者大幅提升工作效率、代码质量和项目管理水平。对于许多程序员来说&#xff0c;编程工具不仅仅是一个简单的编辑器&#xff0c;而是一个综合性的开发环境&#xff0c;可以优化…

[Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8

GIT地址&#xff1a;Https://github.com/monemati/PX4-ROS2-Gazebo-YOLOv8 apt install python3.8-venv Create a virtual environment # create python -m venv /home/xg/px4-venv# activate source /home/xg/px4-venv/bin/activate Clone repository git clone https://g…

【实用干货】5大自动化测试的Python框架!

自从2018年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。 目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因…

博客园-awescnb插件-geek皮肤优化-表情配置

&#x1f496;简介 博客园-awescnb插件-geek皮肤下&#xff0c;表情配置及优化 &#x1f517;链接 官方配置&#xff1a;https://www.yuque.com/awescnb/user/rycpvv#KwRr4 官方配置文档 在线Emoji&#xff1a;https://tool.itzd.cn/ 在线获取Emoji表情 &#x1f527;配置 …

「Python程序设计」基本数据类型:字典

在python编程语言中&#xff0c;字典是一个名值对的组合的集合。也就是说&#xff0c;字典中的数据元素&#xff0c;都是通过名称和数值的形式出现的。字典这种数据结构&#xff0c;类似于C语言中的struct结构体&#xff0c;以及json数据格式类型。 字典的数据结构特性&#x…

MySQL第10讲--约束的介绍

文章目录 前言约束约束的演示 外键约束删除外键外键删除/更新行为 前言 在第9讲MySQL第9讲–函数的介绍中我们主要介绍了几种mysql的内置函数&#xff1a;字符串函数、数值函数、流程函数、日期函数&#xff0c;并对这些函数中常用的几种函数做了总结&#xff0c;如下图所示&am…

多层数组的formdata格式提交处理

一、数据结构 二、主要代码 for (var i 0; i < this.addProjectContentReqList.length; i) {formData.append(addProjectContentReqList[ i ].contentText, this.addProjectContentReqList[i].contentText);for (var k 0; k < this.addProjectContentReqList[i].co…

《深入理解JAVA虚拟机(第2版)》- 第7章 - 学习笔记

第7章 虚拟机类加载机制 7.1 概述 类的加载机制是&#xff1a;虚拟机将描述类的数据从Class文件中读取到内存中&#xff0c;再对这些数据进行检验、转换解析、初始化&#xff0c;最终生成一个可以被虚拟机直接使用的数据类型。之所以称Java是动态加载和动态连接&#xff0c;是…

如何在Windows系统上安装和配置Git客户端

&#x1f600;前言 在这篇博文中&#xff0c;我将为大家介绍如何在Windows系统上安装和配置Git客户端&#xff0c;包括Git for Windows和TortoiseGit。这些工具是进行版本控制管理的必备工具&#xff0c;特别适合开发者在日常工作中使用。通过这篇文章&#xff0c;您将学会如何…

开放式耳机的优缺点?音质好吗?分享四款开放式蓝牙耳机

作为蓝牙耳机的重度使用患者&#xff0c;我认为开放式耳机音质的好坏取决的因素有好多&#xff0c;包括不同的品牌、不同的‌型号及不同的产品所采用的声学技术&#xff0c;而且开放式耳机的音质好不好也是取决使用者的需求的&#xff0c;有些开放式耳机能提供更清晰的人声音频…

为量产而设计:自动驾驶车辆激光雷达旋转外参在线标定与异常排除策略

更多精彩内容&#xff0c;请关注公众号&#xff1a;智驾机器人技术前线 1.论文信息 论文标题&#xff1a;Fault Detection and Exclusion for Robust Online Calibration of Vehicle to LiDAR Rotation Parameter 作者&#xff1a;Jiwon Seok, Chansoo Kim, Paulo Resende, B…

黑马点评4——优惠券秒杀—分布式锁

文章目录 分布式锁什么是分布式锁分布式锁的实现基于redis实现分布式锁分布式锁初级版本redis分布式锁的误删问题分布式锁的原子性问题lua脚本解决多条命令原子性问题Java调用lua脚本改进redis的分布式锁分布式锁-Redisson功能介绍分布式锁-Redisson快速入门Redisson可重入原理…

vue3+vant4父组件点击提交并校验子组件form表单

先看效果 代码如下 父组件 <template><ChildForm ref"childFormRef" /><button click"validateForm">校验表单</button> </template> <script setup> import { ref } from vue; import ChildForm from ./ChildForm.…