请设计实现自己的字符串类(
时间: 2023-05-26 18:04:23 浏览: 86
c++设计实现一个"字符串类",要求系统设计具有一定弹性和可扩展性,使得后续维护和扩展功能更容易,增加或修改系统功能变得更简单。
5星 · 资源好评率100%
MyString),要求支持以下操作:
1. 构造函数、拷贝构造函数和析构函数
2. 重载取下标运算符[],实现类似字符指针的访问方式
3. 重载赋值运算符=,实现类似字符指针的赋值方式
4. 重载加号运算符+,实现字符串的连接
5. 重载等于运算符==,实现两个字符串的比较
6. 重载不等于运算符!=,实现两个字符串的比较
7. 重载括号运算符(),实现截取字符串的功能
下面是一个参考实现:
```c++
class MyString {
public:
// 默认构造函数
MyString() {
data_ = new char[1];
*data_ = '\0';
length_ = 0;
}
// 从字符指针构造
MyString(const char* s) {
length_ = strlen(s);
data_ = new char[length_ + 1];
strcpy(data_, s);
}
// 拷贝构造函数
MyString(const MyString& other) {
length_ = other.length_;
data_ = new char[length_ + 1];
strcpy(data_, other.data_);
}
// 析构函数
~MyString() {
delete[] data_;
}
// 取下标运算符[]
char& operator[](int index) {
return data_[index];
}
// 赋值运算符=
MyString& operator=(const MyString& other) {
if (this != &other) { // 防止自我赋值
delete[] data_;
length_ = other.length_;
data_ = new char[length_ + 1];
strcpy(data_, other.data_);
}
return *this;
}
// 加法运算符+
MyString operator+(const MyString& other) {
MyString new_str;
new_str.length_ = length_ + other.length_;
new_str.data_ = new char[new_str.length_ + 1];
strcpy(new_str.data_, data_);
strcat(new_str.data_, other.data_);
return new_str;
}
// 等于运算符==
bool operator==(const MyString& other) const {
return strcmp(data_, other.data_) == 0;
}
// 不等于运算符!=
bool operator!=(const MyString& other) const {
return strcmp(data_, other.data_) != 0;
}
// 括号运算符()
MyString operator()(int start, int end) {
MyString new_str;
if (start < 0 || end >= length_ || start > end) {
return new_str;
}
int new_len = end - start + 1;
new_str.data_ = new char[new_len + 1];
strncpy(new_str.data_, data_ + start, new_len);
new_str.data_[new_len] = '\0';
new_str.length_ = new_len;
return new_str;
}
private:
char* data_;
int length_;
};
```
使用示例:
```c++
MyString s1;
MyString s2("hello");
MyString s3(s2);
MyString s4 = "world";
s1 = s2;
s4 = s2 + s4;
cout << s4 << endl; // 输出 "helloworld"
if (s2 == s3) {
cout << "s2 equals s3" << endl;
} else {
cout << "s2 not equals s3" << endl;
}
cout << s4(2, 4) << endl; // 输出 "llo"
```
阅读全文