这些方法可以通过重载运算符和调用 `string` 类的成员函数来实现。在 `main` 函数中,创建了几个 `MyString` 对象并进行了一些操作,请编程实现MyString类,使得下面main测试程序能得到正确结果。 int main() { MyString s1("Hello"); MyString s2(" World"); MyString s3 = s1 + s2; // 拼接字符串 s3.print(); if (s1 == s2) { // 判断字符串相等 cout << "s1 equals to s2" << endl; } else { cout << "s1 is not equal to s2" << endl; } MyString sub = s3.substring(6, 5); // 截取子字符串 sub.print(); //显示字符串 cout << "Length of s3: " << s3.length() << endl; // 字符串长度 return 0; }
时间: 2024-01-07 15:06:01 浏览: 67
以下是一个可能的 `MyString` 类的实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString(const char* str = "") {
len = strlen(str);
data = new char[len + 1];
strcpy(data, str);
}
MyString(const MyString& other) {
len = other.len;
data = new char[len + 1];
strcpy(data, other.data);
}
~MyString() {
delete[] data;
}
MyString operator+(const MyString& other) const {
char* str = new char[len + other.len + 1];
strcpy(str, data);
strcat(str, other.data);
MyString result(str);
delete[] str;
return result;
}
bool operator==(const MyString& other) const {
return strcmp(data, other.data) == 0;
}
MyString substring(int start, int len) const {
char* str = new char[len + 1];
strncpy(str, data + start, len);
str[len] = '\0';
MyString result(str);
delete[] str;
return result;
}
int length() const {
return len;
}
void print() const {
cout << data << endl;
}
private:
char* data;
int len;
};
```
在这个实现中,我们使用了动态内存分配来存储字符串内容,因为我们不知道字符串的长度。我们在构造函数中使用了 `strlen` 函数来获取字符串的长度,并使用 `new` 运算符分配了足够的内存来存储字符串。在拷贝构造函数中,我们同样使用了 `new` 运算符来分配内存,并使用 `strcpy` 函数来复制字符串。
我们重载了 `+` 运算符来实现字符串拼接,并重载了 `==` 运算符来判断两个字符串是否相等。注意,在 `+` 运算符中,我们需要新建一个字符数组来存储拼接后的字符串,然后使用 `strcat` 函数将原来的字符串和另一个字符串拼接起来。在 `==` 运算符中,我们使用了 `strcmp` 函数来比较两个字符串是否相等。
我们实现了 `substring` 成员函数来截取子字符串。我们在这个函数中使用了 `new` 运算符来分配内存,并使用 `strncpy` 函数来复制指定长度的子串。注意,在复制后,我们需要在字符数组的结尾加上一个空字符,以保证输出正确。
最后,我们实现了 `length` 函数来返回字符串的长度,并实现了 `print` 函数来输出字符串。
在 `main` 函数中,我们创建了三个 `MyString` 对象,并进行了一些操作,包括字符串拼接、字符串相等性比较、子字符串截取和字符串长度的获取。最后,我们将结果输出到控制台。
阅读全文