当前位置: 首页 > article >正文

2024.9.2 作业

完成mystring类部分功能实现

代码:

/*******************************************/

文件名:work4.h

/*******************************************/

#ifndef WORK4_H
#define WORK4_H
#include <iostream>
#include<cstring>
using namespace std;
class Mystring
{
private:
    char *buf;
public:
    static int count;
public:
    Mystring()
    {
        buf = new char[1];
        *buf = '\0';
        count++;
    }
    Mystring(const char *b);
    ~Mystring()
    {
        delete[] buf;
        count--;
    }
    void show()
    {
        cout<<buf<<endl;
    }
    const Mystring &operator=(const Mystring &R);
    char at(int index);
    const Mystring operator[](int index);
    char data();
    const Mystring c_str();
    bool empty();
    int size()const;
    int length()const;
    int capacity()const;
    bool clear();
    bool push_back(char s);
    bool pop_balck();
    bool append(char s);
    Mystring &operator+=(const Mystring &R);
    const Mystring operator+(const Mystring &R);
    bool operator==(const Mystring &R);
    bool operator!=(const Mystring &R);
    bool operator>(const Mystring &R);
    bool operator>=(const Mystring &R);
    bool operator<=(const Mystring &R);
    friend ostream & operator<<(ostream &L, const Mystring &R);
    friend istream & operator>>(istream &L, Mystring &R);
};

#endif // WORK4_H

/*******************************************/

文件名:work4.cpp

/*******************************************/

#include"work4.h"
int Mystring::count = 0;
Mystring::Mystring(const char *b)
{
    int len=strlen(b);
    this->buf = new char[len + 1];
    strcpy(this->buf, b);
    count++;
}
const Mystring &Mystring::operator=(const Mystring &R)
{
    delete[] buf;
    buf = new char[std::strlen(R.buf) + 1];
    std::strcpy(buf, R.buf);
    return *this;
}
char Mystring::at(int index)
{
    if (index < 0 || index >= (int)strlen(buf)) {
        throw std::out_of_range("Index out of range");
    }
    return this->buf[index];
}
const Mystring Mystring::operator[](int index)
{
    return Mystring(&buf[index]);
}
char Mystring::data()
{
    return *this->buf;
}
const Mystring Mystring::c_str()
{
    return *this;
}
bool Mystring::empty()
{
    return "this->buf=='\0'";
}
int Mystring::size()const
{
    return strlen(this->buf);
}
int Mystring::length()const
{
    return size();
}
int Mystring::capacity()const
{
    return strlen(this->buf)+1;
}
bool Mystring::clear()
{
    delete[]this->buf;
    this->buf=new char[1];
    *buf='\0';
    return 1;
}
bool Mystring::push_back(char s)
{
    char *newBuf = new char[capacity() + 1];
    std::strcpy(newBuf, this->buf);
    newBuf[size()] = s;
    newBuf[size() + 1] = '\0';
    delete[] this->buf;
    buf = newBuf;
    return 1;
}
bool Mystring::pop_balck()
{
    if (empty())
    {
        return 0;
    }
    char *newBuf = new char[size() + 1];
    std::strncpy(newBuf, this->buf, size() - 1);
    newBuf[size() - 1] = '\0';
    delete[] this->buf;
    buf = newBuf;
    return 1;
}
bool Mystring::append(char s)
{
    return push_back(s);
}
Mystring &Mystring::operator+=(const Mystring &R)
{
    *this = *this + R;
    return *this;
}
const Mystring Mystring::operator+(const Mystring &R)
{
    Mystring temp;
    temp.buf = new char[size() + R.size() + 1];
    strcpy(temp.buf, buf);
    strcat(temp.buf, R.buf);
    return temp;
}
bool Mystring::operator==(const Mystring &R)
{
    return strcmp(buf, R.buf) == 0;
}
bool Mystring::operator!=(const Mystring &R)
{
    return !(*this == R);
}
bool Mystring::operator>(const Mystring &R)
{
    return strcmp(this->buf, R.buf) > 0;
}
bool Mystring::operator>=(const Mystring &R)
{
    return *this > R || *this == R;
}
bool Mystring::operator<=(const Mystring &R)
{
    return !(*this > R);
}
ostream & operator<<(ostream &L, const Mystring &R)
{
    L << R.buf;
    return L;
}
istream & operator>>(istream &L, Mystring &R)
{
    L>>R.buf;
    return L;
}

/*******************************************/

文件名:main.cpp

/*******************************************/

#include"work4.h"

int main()
{
    Mystring s1="hello";
    s1.show();
    Mystring s2="world!";
    s2.show();
    Mystring s3=s1+s2;
    s3.show();
    cout<<s1.size()<<endl;
    cout<<s2.length()<<endl;
    cout<<s3.capacity()<<endl;
    cout<<s2.at(3)<<endl;
    cout<<s1.data()<<endl;
    cout<<s3.append('e')<<endl;
    cout<<s2.c_str()<<endl;
    s3.pop_balck();
    cout<<s3<<endl;
    s3.push_back('.');
    cout<<s3<<endl;
    Mystring s4="ssr";
    s4+="'a'";
    cout<<s4<<endl;
    Mystring s5;
    cout<<"请输入:";
    cin>>s5;
    cout<<s5<<endl;
    cout<<(s5>=s3)<<endl;
    return 0;
}

结果:

思维导图:


http://www.kler.cn/a/289539.html

相关文章:

  • react 中 FC 模块作用
  • vwmare虚拟机繁忙的解决办法
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • 第8章利用CSS制作导航菜单
  • Django 的 ModelViewSet 中的 get_queryset 方法自定义查询集
  • uni-app表单⑪
  • Loadrunner12录制时,目标网站打不开的解决办法
  • 光敏电阻传感器详解(STM32)
  • redis之地理空间geo实战以及选项详解
  • Recyclerview部分列固定部分列滑动学习备忘
  • linux 下转化 ppk 文件 为openssh 文件(private,public)
  • 3600关成语填字APP游戏ACCESS\EXCEL数据库
  • 使用脚本编写 HTTP 查询的更有效方法
  • SprinBoot+Vue高校实验室管理微信小程序的设计与实现
  • 网站如何针对不同的DDOS进行防御?
  • 黑马JavaWeb开发笔记10(前端完结)——Vue路由介绍入门、前端工程打包、nginx前端部署
  • IP SSL证书如何实现IP的https
  • Nginx中间件配置
  • RLHF(带有人类反馈的强化学习)初探
  • 科研绘图系列:python语言制标准差的直方图(STD histogram plot)
  • 模拟登录页,华为账号一键登录
  • Charles抓包全流程(Mac端+iOS端)
  • SpringBoot学习(3)Redis使用
  • blender中获取虚拟相机渲染图片上每像素对应的纹理上的像素值
  • C_深入理解指针(四) —— 回调函数、qsort使用举例、qsort函数的模拟实现
  • idea问题解决:java: -source 7 中不支持 方法引用 (请使用 -source 8 或更高版本以启用 方法引用)