C++day1

复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;

class mystring {
private:
    char* buf;
    int len;
public:
    // 单参构造函数,支持隐式调用,列表初始化 len
    mystring(const char* str)
        : len(strlen(str))
    {
        buf = new char[len + 1];
        strcpy(buf, str);
    }


    // copy 函数,从 mystring 对象拷贝
    void copy(const mystring& other) {
        len = other.len;
        buf = new char[len + 1];
        strcpy(buf, other.buf);
    }

    // copy 函数,从 C 风格字符串拷贝
    void copy(const char* str) {
        len = strlen(str); 
        buf = new char[len + 1];
        strcpy(buf, str);
    }

    // append 函数,追加 mystring 对象内容
    void append(const mystring& other) {
        int newLen = len + other.len;
        char* newBuf = new char[newLen + 1];
        strcpy(newBuf, buf);
        strcat(newBuf, other.buf);
        buf = newBuf;
        len = newLen;
    }

    // append 函数,追加 C 风格字符串内容
    void append(const char* str) {
        int strLen = strlen(str);
        int newLen = len + strLen;
        char* newBuf = new char[newLen + 1];
        strcpy(newBuf, buf);
        strcat(newBuf, str);
        buf = newBuf;
        len = newLen;
    }

    // compare 函数,比较 mystring 对象
    int compare(const mystring& other) {
        return strcmp(buf, other.buf);
    }

    // compare 函数,比较 C 风格字符串
    int compare(const char* str)  {
        return strcmp(buf, str);
    }

    // show 函数,输出字符串
    void show()  {
        cout << buf << endl;
    }

    // at 函数,获取指定位置字符
    char at(int index)  {
        if (index >= 0 && index < len) {
            return buf[index];
        }
        // 这里可根据需求处理越界,简单返回空字符或抛异常等,这里返回空字符示例
        return '\0';
    }
};

int main() {
    mystring str = "hello";
    mystring ptr = "world";

    str.copy(ptr);
    str.copy("你好");

    str.append(ptr);
    str.append("你好");

    str.compare(ptr);
    str.compare("你好");

    str.show();
    cout << str.at(0) << endl;

    return 0;
}
相关推荐
add45a2 分钟前
C++中的工厂方法模式
开发语言·c++·算法
java1234_小锋2 分钟前
Java高频面试题:Spring-AOP通知和执行顺序?
java·开发语言·spring
番茄去哪了6 分钟前
Java基础面试题day02
java·开发语言·面向对象编程
無限進步D10 分钟前
二分算法 cpp
算法
xushichao198910 分钟前
C++中的工厂模式高级应用
开发语言·c++·算法
njsgcs11 分钟前
c# solidworks 折弯系数检查
开发语言·c#
SuperEugene14 分钟前
Vue3 + Element Plus 表格实战:批量操作、行内编辑、跨页选中逻辑统一|表单与表格规范篇
开发语言·前端·javascript
2501_9249526918 分钟前
C++模块化编程指南
开发语言·c++·算法
qzhqbb18 分钟前
差分隐私与大模型+差分隐私在相关领域应用的论文总结
人工智能·算法
2401_8319207422 分钟前
基于C++的爬虫框架
开发语言·c++·算法