使用c++请定义一个 `MyString` 类,提供一些常见的字符串操作方法,例如字符串拼接、判断字符串相等、截取子字符串、获取字符串长度以及显示字符串等。这些方法可以通过重载运算符和调用 `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-24 11:05:16 浏览: 115
下面是一个可能的 `MyString` 类的实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
public:
MyString(const char* str = "") {
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
MyString(const MyString& other) {
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
}
~MyString() {
delete[] m_data;
}
MyString operator+(const MyString& other) {
MyString newStr;
int len1 = strlen(m_data);
int len2 = strlen(other.m_data);
newStr.m_data = new char[len1 + len2 + 1];
strcpy(newStr.m_data, m_data);
strcat(newStr.m_data, other.m_data);
return newStr;
}
bool operator==(const MyString& other) const {
return strcmp(m_data, other.m_data) == 0;
}
MyString substring(int start, int len) {
MyString newStr;
int len1 = strlen(m_data);
if (start < 0 || start >= len1 || len <= 0 || start + len > len1)
return newStr;
newStr.m_data = new char[len + 1];
strncpy(newStr.m_data, m_data + start, len);
newStr.m_data[len] = '\0';
return newStr;
}
int length() const {
return strlen(m_data);
}
void print() const {
cout << m_data << endl;
}
private:
char* m_data;
};
```
这个类有一个私有成员 `m_data` 指向存储字符串的内存。在构造函数中,我们使用 `new` 运算符为 `m_data` 动态分配内存,并将传递给构造函数的字符串复制到 `m_data` 中。在复制构造函数中,我们也需要动态分配内存,并将其他对象的 `m_data` 复制到新对象的 `m_data` 中。
`operator+` 重载了 `+` 运算符,用于拼接两个字符串。我们首先计算出新字符串的长度,然后使用 `new` 运算符为它分配内存。接着,我们将第一个字符串复制到新字符串中,然后使用 `strcat` 函数将第二个字符串拼接到新字符串后面。最后,我们返回新字符串。
`operator==` 重载了 `==` 运算符,用于判断两个字符串是否相等。我们使用 `strcmp` 函数比较两个字符串是否相等。
`substring` 方法用于截取子字符串。它首先检查参数是否有效,如果无效就返回一个空字符串。否则,它使用 `new` 运算符为新字符串分配内存,然后使用 `strncpy` 函数将原字符串中指定位置的子串复制到新字符串中。最后,我们在新字符串的结尾添加一个空字符。
`length` 方法返回字符串的长度,我们直接使用 `strlen` 函数实现即可。
`print` 方法用于显示字符串,我们直接使用 `cout` 输出即可。
在 `main` 函数中,我们首先创建了三个 `MyString` 对象 `s1`、`s2` 和 `s3`。然后,我们使用 `operator+` 方法将 `s1` 和 `s2` 拼接起来,并将结果赋值给 `s3`。接着,我们使用 `print` 方法显示 `s3` 的内容。我们还使用 `operator==` 方法判断 `s1` 和 `s2` 是否相等,根据结果输出相应的信息。我们使用 `substring` 方法从 `s3` 中截取出一个子字符串,并使用 `print` 方法显示它的内容。最后,我们使用 `length` 方法获取 `s3` 的长度,并显示出来。
阅读全文