请设计实现自己的字符串类(不要直接用系统 的string)
时间: 2023-05-28 20:05:36 浏览: 67
以下是一个简单的字符串类实现:
```c++
#include <iostream>
#include <cstring>
class MyString {
private:
char* m_data;
int m_length;
public:
MyString() {
m_data = nullptr;
m_length = 0;
}
MyString(const char* str) {
m_length = strlen(str);
m_data = new char[m_length + 1];
strcpy(m_data, str);
}
MyString(const MyString& other) {
m_length = other.m_length;
m_data = new char[m_length + 1];
strcpy(m_data, other.m_data);
}
~MyString() {
delete[] m_data;
}
MyString& operator=(const MyString& other) {
if (this != &other) {
delete[] m_data;
m_length = other.m_length;
m_data = new char[m_length + 1];
strcpy(m_data, other.m_data);
}
return *this;
}
friend std::ostream& operator<<(std::ostream& os, const MyString& str) {
os << str.m_data;
return os;
}
int length() const {
return m_length;
}
const char* c_str() const {
return m_data;
}
MyString operator+(const MyString& other) const {
MyString newStr;
newStr.m_length = m_length + other.m_length;
newStr.m_data = new char[newStr.m_length + 1];
strcpy(newStr.m_data, m_data);
strcat(newStr.m_data, other.m_data);
return newStr;
}
bool operator==(const MyString& other) const {
return strcmp(m_data, other.m_data) == 0;
}
bool operator!=(const MyString& other) const {
return !(*this == other);
}
};
```
该字符串类包含了以下成员函数和运算符重载:
- 构造函数:默认构造函数、以C风格字符串为参数的构造函数、复制构造函数
- 析构函数
- 赋值运算符重载
- 取长度函数
- 取C风格字符串函数
- 拼接运算符重载
- 相等运算符重载
- 不相等运算符重载
使用该字符串类的示例:
```c++
int main() {
MyString str1("Hello");
MyString str2("World");
MyString str3 = str1 + str2;
std::cout << str3 << std::endl;
std::cout << str3.length() << std::endl;
std::cout << str3.c_str() << std::endl;
std::cout << (str1 == str2) << std::endl;
std::cout << (str1 != str2) << std::endl;
return 0;
}
```
输出结果:
```
HelloWorld
10
HelloWorld
0
1
```