设计实现一个字符串类mystring
时间: 2023-06-16 21:05:52 浏览: 146
c++设计实现一个"字符串类",要求系统设计具有一定弹性和可扩展性,使得后续维护和扩展功能更容易,增加或修改系统功能变得更简单。
5星 · 资源好评率100%
好的,下面是一个简单的mystring类的设计。
```c++
class mystring {
private:
int length; // 字符串长度
char* str; // 存储字符串的字符数组
public:
mystring(); // 默认构造函数
mystring(const char* s); // 带参构造函数
mystring(const mystring& s); // 拷贝构造函数
~mystring(); // 析构函数
int size() const; // 返回字符串长度
bool empty() const; // 判断字符串是否为空
void clear(); // 清空字符串
const char* c_str() const; // 返回C风格字符串
mystring& operator=(const mystring& s); // 赋值运算符重载
mystring& operator+=(const mystring& s); // 加等运算符重载
char& operator[](int index); // 下标运算符重载
const char& operator[](int index) const; // 下标运算符重载(常量对象)
bool operator==(const mystring& s) const; // 相等运算符重载
bool operator!=(const mystring& s) const; // 不等运算符重载
bool operator<(const mystring& s) const; // 小于运算符重载
bool operator>(const mystring& s) const; // 大于运算符重载
bool operator<=(const mystring& s) const; // 小于等于运算符重载
bool operator>=(const mystring& s) const; // 大于等于运算符重载
friend std::ostream& operator<<(std::ostream& os, const mystring& s); // 输出运算符重载
friend std::istream& operator>>(std::istream& is, mystring& s); // 输入运算符重载
};
```
下面是这些成员函数的具体实现。
```c++
mystring::mystring() {
length = 0;
str = new char[1];
str[0] = '\0';
}
mystring::mystring(const char* s) {
length = strlen(s);
str = new char[length + 1];
strcpy(str, s);
}
mystring::mystring(const mystring& s) {
length = s.length;
str = new char[length + 1];
strcpy(str, s.str);
}
mystring::~mystring() {
delete[] str;
}
int mystring::size() const {
return length;
}
bool mystring::empty() const {
return length == 0;
}
void mystring::clear() {
delete[] str;
length = 0;
str = new char[1];
str[0] = '\0';
}
const char* mystring::c_str() const {
return str;
}
mystring& mystring::operator=(const mystring& s) {
if (this != &s) {
delete[] str;
length = s.length;
str = new char[length + 1];
strcpy(str, s.str);
}
return *this;
}
mystring& mystring::operator+=(const mystring& s) {
char* temp = new char[length + s.length + 1];
strcpy(temp, str);
strcat(temp, s.str);
delete[] str;
str = temp;
length += s.length;
return *this;
}
char& mystring::operator[](int index) {
return str[index];
}
const char& mystring::operator[](int index) const {
return str[index];
}
bool mystring::operator==(const mystring& s) const {
return strcmp(str, s.str) == 0;
}
bool mystring::operator!=(const mystring& s) const {
return strcmp(str, s.str) != 0;
}
bool mystring::operator<(const mystring& s) const {
return strcmp(str, s.str) < 0;
}
bool mystring::operator>(const mystring& s) const {
return strcmp(str, s.str) > 0;
}
bool mystring::operator<=(const mystring& s) const {
return strcmp(str, s.str) <= 0;
}
bool mystring::operator>=(const mystring& s) const {
return strcmp(str, s.str) >= 0;
}
std::ostream& operator<<(std::ostream& os, const mystring& s) {
os << s.str;
return os;
}
std::istream& operator>>(std::istream& is, mystring& s) {
char temp[1024];
is >> temp;
s = mystring(temp);
return is;
}
```
这里只是提供了一个简单的mystring类的设计,如果需要更加完善的功能,可以根据实际需求进行扩展。
阅读全文