【C++】仿照string类,实现myString

仿照string类,实现myString

main.c

复制代码
#include"myString.h"

int main()
{
    myString s1("hello world");
    cout<<"字符串长度位:"<<s1.str_size()<<" C语言格式输出"<<s1.c_str()<<endl;
    cout<<"第7个字符是:";
    s1.at(7);
    s1.set("zxy是最帅的人不接受反驳");//修改字符串
    s1.show();//查看是否修改成功
    return 0;
}

myString.c

复制代码
#include"myString.h"
//判空函数
bool myString::empty()
{
    return size;
}
//set函数修改字符串的内容
void myString::set(const char *s)
{
    strcpy(str,s);//复制内容
    expend();//判断是否需要扩容
    strcpy(str,s);//如果扩容代表第一次可能没复制成功,重新复制一边
}
//size函数
int myString::str_size()
{
    return strlen(str);
}
//c_str函数
const char* myString::c_str()
{
    expend();
    str[str_size()]= '\0';
    return str;
}
//at函数
myString &myString::at(int index)
{
    if(index < 1 || index > str_size())
    {
        cout<<"下标不合理"<<endl;
    }
    expend();
    cout<<str[index-1]<<endl;
}
//二倍扩容
void myString::expend()
{
    char *temp;
    //说明申请的空间已经用完了,需要扩容
    if(str_size() >= size)
    {
        size = size*2;
        temp = new char[size];
        strcpy(temp,str);
        delete str;
        str = temp;
    }
}
//展示函数
void myString::show()
{
    cout<<str<<endl;
}

myString.h

复制代码
#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include<cstring>
using namespace std;
class myString
{
private:
    char *str;   //记录字符串
    int size;    //记录字符串的长度
    
public:
    myString():size(10)
    {
        str = new char[size];//堆区申请空间大小为size
    }
    //有参构造
    myString(const char *s)  //有参构造
    {
        size = strlen(s);
        str = new char[size];
        strcpy(str,s);
    }
    //判空函数
    bool empty();
    //set函数修改字符串的内容
    void set(const char *s);
    //size函数
    int str_size();
    //c_str函数
    const char* c_str();
    //at函数
    myString &at(int index);
    //二倍扩容
    void expend();
    //展示函数
    void show();
};
#endif // MYSTRING_H

运行效果展示

相关推荐
不是万能的豆学长7 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
时间静止不是简史7 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_322414280410 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
懂点Tech11 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵12 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin12 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
福建佰胜张工13 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
念何架构之路13 小时前
go-grpc设计思想
开发语言·后端·golang
catoop13 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x13 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端