编写一个完整的字符串类MyString, 使它具有默认构造函数、传指针构造函数、复制构造函数、析构函数、set_string,get_string,get_length,append,复制运算符重载等函数功能
时间: 2024-09-28 20:05:06 浏览: 40
C++实现 类string的 普通构造函数, 拷贝构造函数 析构函数 和赋值函数
4星 · 用户满意度95%
```cpp
class MyString {
public:
// 默认构造函数,创建一个空字符串
MyString() : data_(nullptr), length_(0) {}
// 传指针构造函数,初始化字符串内容
explicit MyString(const char* str) : data_(new char[strlen(str) + 1]), length_(strlen(str)) {
std::copy(str, str + length_, data_);
data_[length_] = '\0'; // 添加结束符
}
// 复制构造函数,复制另一个MyString的内容
MyString(const MyString& other) : data_(new char[other.length_ + 1]), length_(other.length_) {
std::copy(other.data_, other.data_ + other.length_, data_);
data_[length_] = '\0';
}
~MyString() { // 析构函数,释放内存
delete[] data_;
}
// 设置字符串内容
void set_string(const char* new_str) {
if (new_str != nullptr) {
delete[] data_;
data_ = new char[strlen(new_str) + 1];
length_ = strlen(new_str);
std::copy(new_str, new_str + length_, data_);
data_[length_] = '\0';
}
}
// 获取字符串内容
const char* get_string() const { return data_; }
// 获取字符串长度
size_t get_length() const { return length_; }
// 追加字符串
void append(const MyString& other) {
if (data_ && other.data_) {
size_t newLength = length_ + other.length_ + 1;
char* newData = new char[newLength];
std::copy(data_, data_ + length_, newData);
std::copy(other.data_, other.data_ + other.length_, newData + length_);
newData[newLength - 1] = '\0';
delete[] data_;
data_ = newData;
length_ = newLength;
}
}
// 复制运算符重载
MyString operator=(const MyString& other) {
if (this == &other) return *this; // 防止自我赋值导致无限递归
delete[] data_;
data_ = new char[other.length_ + 1];
length_ = other.length_;
std::copy(other.data_, other.data_ + other.length_, data_);
data_[length_] = '\0';
return *this;
}
private:
char* data_; // 存储字符串
size_t length_; // 字符串长度
};
// 相关问题--
1. 我可以如何从MyString实例中删除某个字符?
2. 如果我想比较两个MyString是否相等,应该如何处理?
3. 如果需要支持连接两个字符串并返回新的结果,应该怎么做?
```
阅读全文