当前位置:实例文章 » HTML/CSS实例» [文章]【C++】string类模拟实现

【C++】string类模拟实现

发布人:shili8 发布时间:2025-02-10 05:57 阅读次数:0

**C++ string 类模拟实现**

在 C++ 中,`std::string` 是一个非常重要的类,它提供了字符串操作的基本功能。然而,在某些情况下,我们可能需要自己实现一个 `string` 类来满足特定的需求。在本文中,我们将尝试模拟实现一个 `string` 类,并且提供一些示例代码和注释。

**1. string 类定义**

首先,我们需要定义我们的 `string` 类。我们将其命名为 `MyString`。

cppclass MyString {
public:
 // 构造函数 MyString(const char* str = "");
 // 拷贝构造函数 MyString(const MyString& other);
 // 赋值运算符 MyString& operator=(const MyString& other);
 // 析构函数 ~MyString();

 // 获取长度 size_t length() const;
 // 比较两个字符串 bool operator==(const char* str) const;
 bool operator!=(const char* str) const;

 // 插入字符 MyString& insert(size_t pos, char c);
 // 删除子串 MyString& erase(size_t pos, size_t len);

private:
 // 内存缓冲区 char* buffer_;
 // 缓冲区大小 size_t capacity_;
};

**2. 构造函数**

构造函数用于初始化 `MyString` 对象。我们提供了一个默认构造函数,参数为 `const char* str = ""`,表示如果不传入任何参数,则使用空字符串。
cppMyString::MyString(const char* str) {
 if (str != nullptr) {
 capacity_ = strlen(str);
 buffer_ = new char[capacity_ +1];
 strcpy(buffer_, str);
 } else {
 capacity_ =0;
 buffer_ = nullptr;
 }
}

**3. 拷贝构造函数**

拷贝构造函数用于复制一个 `MyString` 对象。
cppMyString::MyString(const MyString& other) {
 capacity_ = other.capacity_;
 buffer_ = new char[capacity_ +1];
 strcpy(buffer_, other.buffer_);
}

**4. 赋值运算符**

赋值运算符用于将一个 `MyString` 对象赋给另一个 `MyString` 对象。
cppMyString& MyString::operator=(const MyString& other) {
 if (this != &other) {
 delete[] buffer_;
 capacity_ = other.capacity_;
 buffer_ = new char[capacity_ +1];
 strcpy(buffer_, other.buffer_);
 }
 return *this;
}

**5. 析构函数**

析构函数用于释放 `MyString` 对象占用的内存。
cppMyString::~MyString() {
 delete[] buffer_;
}

**6. 获取长度**

获取长度函数用于返回 `MyString` 对象的长度。
cppsize_t MyString::length() const {
 return capacity_;
}

**7. 比较两个字符串**

比较两个字符串函数用于比较 `MyString` 对象和一个 `const char*` 字符串。
cppbool MyString::operator==(const char* str) const {
 if (str == nullptr || buffer_ == nullptr) return false;
 return strcmp(buffer_, str) ==0;
}

bool MyString::operator!=(const char* str) const {
 return !(*this == str);
}

**8. 插入字符**

插入字符函数用于在 `MyString` 对象中插入一个字符。
cppMyString& MyString::insert(size_t pos, char c) {
 if (pos > capacity_) pos = capacity_;
 size_t newCapacity = capacity_ +1;
 char* newBuffer = new char[newCapacity];
 memcpy(newBuffer, buffer_, pos);
 newBuffer[pos] = c;
 memcpy(newBuffer + pos +1, buffer_ + pos, capacity_ - pos);
 delete[] buffer_;
 buffer_ = newBuffer;
 capacity_ = newCapacity;
 return *this;
}

**9. 删除子串**

删除子串函数用于从 `MyString` 对象中删除一个子串。
cppMyString& MyString::erase(size_t pos, size_t len) {
 if (pos + len > capacity_) len = capacity_ - pos;
 size_t newCapacity = capacity_ - len;
 char* newBuffer = new char[newCapacity];
 memcpy(newBuffer, buffer_, pos);
 memcpy(newBuffer + pos, buffer_ + pos + len, capacity_ - pos - len);
 delete[] buffer_;
 buffer_ = newBuffer;
 capacity_ = newCapacity;
 return *this;
}

以上就是我们对 `string` 类模拟实现的基本步骤和代码示例。当然,这只是一个简单的实现,实际上 `std::string` 还有很多其他功能和优化,我们这里只提供了一个基本的参考。

其他信息

其他资源

Top