请定义一个 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-19 08:02:41 浏览: 72
下面是一个基本的 MyString 类的实现,可以满足上述要求:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class MyString {
private:
char* str; // 字符串内容
int len; // 字符串长度
public:
// 构造函数
MyString(const char* s = "") {
len = strlen(s);
str = new char[len + 1];
strcpy(str, s);
}
// 复制构造函数
MyString(const MyString& other) {
len = other.len;
str = new char[len + 1];
strcpy(str, other.str);
}
// 析构函数
~MyString() {
delete[] str;
}
// 重载运算符 +
MyString operator+(const MyString& other) const {
MyString newStr;
newStr.len = len + other.len;
newStr.str = new char[newStr.len + 1];
strcpy(newStr.str, str);
strcat(newStr.str, other.str);
return newStr;
}
// 重载运算符 ==
bool operator==(const MyString& other) const {
return strcmp(str, other.str) == 0;
}
// 截取子字符串
MyString substring(int start, int len) const {
MyString sub;
sub.len = len;
sub.str = new char[len + 1];
strncpy(sub.str, str + start, len);
sub.str[len] = '\0';
return sub;
}
// 获取字符串长度
int length() const {
return len;
}
// 显示字符串
void print() const {
cout << str << endl;
}
};
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;
}
```
该程序输出结果为:
```
Hello World
s1 is not equal to s2
World
Length of s3: 11
```
阅读全文