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

2024.8.29 C++

作业

仿照string类,实现myString

代码

#include <iostream>
#include <cstring>
using namespace std;
//仿照string完成myString类
class myString
{
    private:
        char *str;          //记录c风格的字符串
        int size;            //记录字符串的实际长度
    public:
        //无参构造
        myString():size(10)
        {
            str = new char[size];         //构造出一个长度为10的字符串
        }
        //有参构造
        myString(const char *s):size(strlen(s))            //有参构造     string  s("hello wirld");
        {
               str = new char[size+1];
               strcpy(str,s);
        }
        ~myString()             //定义析构函数,用于释放申请的空间
        {
            delete[] str;
        }
        //判空函数
        bool empty();
        //size函数
        int ssize();
        //c_str函数
        char *c_str();
        //at函数
        char &at(int index);
        void add(const char *s);
        //二倍扩容
        void expand();
};

bool myString::empty()      //判空函数
{
    return size == 0;
}

int myString::ssize()
{
    return size;
}

char *myString::c_str()     //传换成c风格的字符串
{
    return str;
}

char &myString::at(int index)   //返回元素
{
    return str[index];
}

void myString::add(const char *s)   //如果使用的是无参构造函数,需要进行字符串的写入使用该函数
{
    if(strlen(s) > (unsigned)size)  //检测是否默认申请的大小是否可以容纳下写入的字符串
    {
        expand();           //进行二倍扩充
    }
    strcpy(str,s);
}

void myString::expand() //二倍扩充
{
    size = 2 * size;    //默认的size*2
    char *temp = new char[size+1];  //申请一个大小为之前两倍的空间
    strcpy(temp,str);   //将之前的数据放入新的空间内
    char *p = str;      //准备释放原空间
    str = temp;         //原来的指针指向新的空间
    delete []p;         //删除原空间
}

int main()
{
    myString s1("hello world");     //使用有参构造函数并初始化为“hello world”
    s1.at(0) = 'H';             //把“hello world”的第一个元素'h'变成'H'
    printf("%s\n",s1.c_str());  //输出c语言风格的字符串
    cout << "size = " << s1.ssize() << endl;    //输出size,因为用的是有参构造函数,所以他的size就是字符串的大小

    myString s2;        //使用无参构造函数,初始默认的size为10
    s2.add("hello world");    //写入"hello world"
    printf("%s\n",s2.c_str());  //输出c语言风格的字符串
    cout << "size " << s2.ssize();  //输出size,因为"hello world"的大小是11,所以会进行二倍扩充,size就变成了20,字符串的长度是21
    return 0;
}

效果图

 

思维导图


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

相关文章:

  • 如何向函数模块 FM 中传递 Range 参数
  • 树莓派(Raspberry Pi)Pico 2 C_C++开发环境配置(Docker+SDK)
  • HTTP常见的状态码有哪些,都代表什么意思
  • Ruby编程语言全景解析:从基础到进阶
  • SpringBoot参数注解
  • 三正科技笔试题
  • C#面:ASP.NET MVC 中还有哪些注释属性用来验证?
  • RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型
  • 设计模式--装饰器模式
  • 理解torch.argmax() ,我是错误的
  • 融资和融券分别是什么意思,融资融券开通后能融到多少资金?
  • Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2
  • Java 入门指南:Java NIO —— Selector(选择器)
  • 【hot100篇-python刷题记录】【搜索二维矩阵】
  • 分布式锁的实现:ZooKeeper 的解决方案
  • hive数据迁移
  • 低代码革命:JNPF平台如何简化企业应用开发
  • Linux 中的中断响应机制
  • TCP keepalive和HTTP keepalive区别
  • SCP拷贝失败解决办法
  • 基于单片机的指纹识别考勤系统设计
  • Web应用服务器Tomcat
  • 基于STM32开发的智能家居温度控制系统
  • Linux下的使用字符设备驱动框架编写ADC驱动 ——MQ-4传感器
  • 我在高职教STM32——ADC电压采集与光敏电阻(2)
  • rnn-手动实现