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

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;
}

效果展示

相关推荐
言之。3 分钟前
【Go语言】RPC 使用指南(初学者版)
开发语言·rpc·golang
投笔丶从戎41 分钟前
Kotlin Multiplatform--01:项目结构基础
android·开发语言·kotlin
OpenC++1 小时前
【C++QT】Buttons 按钮控件详解
c++·经验分享·qt·leetcode·microsoft
杜小暑1 小时前
动态内存管理
c语言·开发语言·动态内存管理
想不明白的过度思考者1 小时前
Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
java·开发语言
YuforiaCode2 小时前
第十二届蓝桥杯 2021 C/C++组 直线
c语言·c++·蓝桥杯
我真的不会C2 小时前
QT窗口相关控件及其属性
开发语言·qt
CodeCraft Studio2 小时前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中进行数据验
开发语言·python·excel
火柴盒zhang2 小时前
websheet之 编辑器
开发语言·前端·javascript·编辑器·spreadsheet·websheet
景天科技苑2 小时前
【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
开发语言·后端·rust·match·enum·枚举与模式匹配·rust枚举与模式匹配