【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` 还有很多其他功能和优化,我们这里只提供了一个基本的参考。

