【C++】STL | 模拟实现简易string
发布人:shili8
发布时间:2025-01-05 10:43
阅读次数:0
**模拟实现简易String类**
在C++中,标准模板库(STL)提供了一个`std::string`类来处理字符串操作。然而,在某些情况下,我们可能需要自己实现一个简易的`String`类来满足特定的需求。在本文中,我们将尝试模拟实现一个简易的`String`类,包括基本的构造函数、赋值运算符、长度获取等功能。
###1. 简易String类定义首先,我们需要定义我们的简易`String`类。我们将其命名为`MyString`:
cppclass MyString { public: // 构造函数 MyString(); MyString(const char* str); MyString(const MyString& other); // 赋值运算符 MyString& operator=(const MyString& other); // 获取长度 size_t length() const; // 比较两个字符串 bool operator==(const MyString& other) const; bool operator!=(const MyString& other) const; // 输出到控制台 void print() const; private: char* data_; // 存储实际的字符数组};
###2. 构造函数实现我们先来实现构造函数。有三个构造函数:一个无参构造函数、一个从`const char*`类型的字符串转换构造函数,以及一个拷贝构造函数:
cppMyString::MyString() { data_ = new char[1]; // 初始化一个空字符数组 data_[0] = '0'; // 结尾符为'0' } MyString::MyString(const char* str) { size_t len = strlen(str); // 获取源字符串的长度 data_ = new char[len +1]; // 分配足够空间的字符数组 strcpy(data_, str); // 复制源字符串到我们的字符数组中} MyString::MyString(const MyString& other) { size_t len = other.length(); // 获取其他对象的长度 data_ = new char[len +1]; // 分配足够空间的字符数组 strcpy(data_, other.data_); // 复制其他对象的内容到我们的字符数组中}
###3. 赋值运算符实现接下来,我们需要实现赋值运算符。我们只需要实现一个从`const MyString&`类型的对象赋值给当前对象的赋值运算符:
cppMyString& MyString::operator=(const MyString& other) { if (this != &other) { // 检查是否是自我赋值 delete[] data_; // 删除当前对象的字符数组 size_t len = other.length(); // 获取其他对象的长度 data_ = new char[len +1]; // 分配足够空间的字符数组 strcpy(data_, other.data_); // 复制其他对象的内容到我们的字符数组中 } return *this; // 返回当前对象以支持链式赋值}
###4. 获取长度实现我们需要实现一个获取长度的函数:
cppsize_t MyString::length() const { size_t len =0; while (data_[len] != '0') { // 遍历字符数组直到结尾符为'0' len++; } return len; // 返回实际长度}
###5. 比较两个字符串实现我们需要实现一个比较两个`MyString`对象的函数:
cppbool MyString::operator==(const MyString& other) const { size_t len1 = length(); // 获取当前对象的长度 size_t len2 = other.length(); // 获取其他对象的长度 if (len1 != len2) { // 如果长度不等,直接返回false return false; } for (size_t i =0; i < len1; i++) { // 遍历两个字符数组 if (data_[i] != other.data_[i]) { // 比较对应位置的字符 return false; } } return true; // 如果遍历完毕没有返回false,说明两个字符串相等} bool MyString::operator!=(const MyString& other) const { return !(*this == other); // 使用==运算符实现!=运算符}
###6. 输出到控制台实现最后,我们需要实现一个输出到控制台的函数:
cppvoid MyString::print() const { printf("%s", data_); // 直接使用printf函数输出字符数组}
### 总结在本文中,我们成功地模拟实现了一个简易的`MyString`类,包括基本的构造函数、赋值运算符、长度获取等功能。这个类可以作为一个简单的例子来学习C++中的字符串操作。