#include <iostream>
#include <cstring>
#include <cassert> // 用于断言
using namespace std;
class Mystring {
private:
char *str;
int len;
public:
// 默认构造函数
Mystring() : str(nullptr), len(0) {}
// 构造函数,从C字符串初始化
Mystring(const char *const cstr) {
if (cstr) {
len = strlen(cstr);
str = new char[len + 1]; // +1 for null terminator
strcpy(str, cstr);
} else {
str = nullptr;
len = 0;
}
}
// 析构函数
~Mystring() {
delete[] str;
}
// 拷贝构造函数
Mystring(const Mystring &other) {
len = other.len;
str = new char[len + 1];
strcpy(str, other.str);
}
// 拷贝赋值函数
Mystring &operator=(const Mystring &other) {
if (this != &other) {
delete[] str;
len = other.len;
str = new char[len + 1];
strcpy(str, other.str);
}
return *this;
}
// 返回C风格字符串
const char *c_str() const {
return str;
}
// 返回字符串长度
int length() const {
return len;
}
// 检查字符串是否为空
bool empty() const {
return len == 0;
}
// 访问字符串中特定位置的字符(注意边界检查)
char at(int index) const {
assert(index >= 0 && index < len); // 确保索引有效
return str[index];
}
// 移动语义支持(可选,根据需要添加)
};
int main(int argc, const char *argv[]) {
Mystring str("hello");
cout << str.c_str() << endl; // 输出: hello
cout << str.at(1) << endl; // 输出: e
int len = str.length();
cout << len << endl; // 输出: 5
if (str.empty()) {
cout << "String is empty." << endl;
} else {
cout << "String is not empty." << endl;
}
return 0;
}
9.3作业
最新推荐文章于 2024-10-05 12:07:50 发布