当前位置:实例文章 » JAVA Web实例» [文章]【C++】string类的模拟实现(增删查改,比大小,运算符重载)

【C++】string类的模拟实现(增删查改,比大小,运算符重载)

发布人:shili8 发布时间:2025-02-11 00:01 阅读次数:0

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

在 C++ 中,`std::string` 是一个非常重要的类,它提供了字符串的基本操作,如增删查改、比大小等功能。然而,在实际开发中,我们可能需要自己实现一个 `string` 类来满足特定的需求。在本文中,我们将模拟实现一个 `string` 类,包括增删查改、比大小等功能,并对其进行运算符重载。

###1. string 类的定义首先,我们定义一个 `string` 类,它包含以下成员变量:

cppclass String {
private:
 char* str; // 字符串内容 int len; // 字符串长度public:
 String(); // 构造函数 ~String(); // 析构函数 void append(char c); // 向字符串追加一个字符 void insert(int pos, char c); // 在指定位置插入一个字符 void erase(int pos); // 删除指定位置的字符 int compare(const String& str) const; // 比较两个字符串 bool operator<(const String& str) const; // 小于运算符重载 bool operator>(const String& str) const; // 大于运算符重载 bool operator==(const String& str) const; // 等于运算符重载};


###2. 构造函数和析构函数在 `string` 类中,我们需要定义一个构造函数来初始化成员变量,一个析构函数来释放内存:

cppString::String() {
 str = new char[1]; // 初始化长度为1的字符串 len =0;
}

String::~String() {
 delete[] str; //释放内存}


###3. 向字符串追加一个字符我们实现了 `append` 函数来向字符串追加一个字符:

cppvoid String::append(char c) {
 char* temp = new char[len +2]; // 创建临时空间 strcpy(temp, str); // 复制原有内容 temp[len] = c; // 追加新字符 temp[len +1] = '0'; // 结尾符号 delete[] str; //释放原有内存 str = temp; // 更新字符串指针 len++; // 更新长度}


###4. 在指定位置插入一个字符我们实现了 `insert` 函数来在指定位置插入一个字符:

cppvoid String::insert(int pos, char c) {
 if (pos < 0 || pos > len) { // 检查位置合法性 return;
 }
 char* temp = new char[len +2]; // 创建临时空间 strcpy(temp, str); // 复制原有内容 for (int i = len; i >= pos; --i) {
 temp[i +1] = temp[i]; // 移位字符 }
 temp[pos] = c; // 插入新字符 temp[len +1] = '0'; // 结尾符号 delete[] str; //释放原有内存 str = temp; // 更新字符串指针 len++; // 更新长度}


###5. 删除指定位置的字符我们实现了 `erase` 函数来删除指定位置的字符:

cppvoid String::erase(int pos) {
 if (pos < 0 || pos >= len) { // 检查位置合法性 return;
 }
 char* temp = new char[len -1]; // 创建临时空间 strcpy(temp, str); // 复制原有内容 for (int i =0; i < pos; ++i) {
 temp[i] = str[i]; // 移位字符 }
 for (int i = pos +1; i <= len; ++i) {
 temp[i -1] = str[i]; // 移位字符 }
 delete[] str; //释放原有内存 str = temp; // 更新字符串指针 len--; // 更新长度}


###6. 比较两个字符串我们实现了 `compare` 函数来比较两个字符串:

cppint String::compare(const String& str) const {
 int min_len = (len < str.len ? len : str.len); // 确定最小长度 for (int i =0; i < min_len; ++i) { // 比较前min_len个字符 if (str.str[i] != str[i]) { // 如果不相等,返回比较结果 return str.str[i] - str[i];
 }
 }
 return len - str.len; // 如果长度相同,返回长度差异}


###7. 运算符重载我们对 `string` 类进行运算符重载:

cppbool String::operator<(const String& str) const {
 return compare(str) < 0;
}

bool String::operator>(const String& str) const {
 return compare(str) >0;
}

bool String::operator==(const String& str) const {
 return compare(str) ==0;
}


###8. 测试我们测试 `string` 类的功能:

cppint main() {
 String s1, s2;
 s1.append('a');
 s1.append('b');
 s1.append('c');
 s2.append('d');
 s2.append('e');
 s2.append('f');
 std::cout << "s1: " << s1.str << std::endl; // 输出s1 std::cout << "s2: " << s2.str << std::endl; // 输出s2 s1.insert(0, 'x'); // 在s1的头部插入字符 s2.erase(3); // 删除s2的第4个字符 std::cout << "s1: " << s1.str << std::endl; // 输出更新后的s1 std::cout << "s2: " << s2.str << std::endl; // 输出更新后的s2 if (s1 < s2) {
 std::cout << "s1小于s2" << std::endl;
 } else if (s1 > s2) {
 std::cout << "s1大于s2" << std::endl;
 } else {
 std::cout << "s1等于s2" << std::endl;
 }
 return0;
}


在本文中,我们模拟实现了一个 `string` 类,包括增删查改、比大小等功能,并对其进行运算符重载。我们测试了 `string` 类的功能,确保其正确性和有效性。

其他信息

其他资源

Top