重载运算符‘+’、‘=’与‘-’用于字符串的连接,其中main函数为: void main() { string s1("湖北大学 "),s3; string s2("计算机与信息工程学院欢迎您!"); s3=s1+s2; s3.display(); s3=s1-s2; s3.display(); } 要求运行结果为: 湖北大学 计算机学院欢迎您! 湖北大学计算机学院欢迎您!
时间: 2023-12-10 19:39:49 浏览: 73
下面是符合要求的代码:
```c++
#include <iostream>
#include <string.h>
using namespace std;
class String {
public:
String(const char* str = ""); // 构造函数
String(const String& other); // 拷贝构造函数
~String(); // 析构函数
String operator+(const String& str) const; // 重载运算符+
String operator-(const String& str) const; // 重载运算符-
String& operator=(const String& str); // 重载运算符=
void display() const; // 打印字符串
private:
char* m_data; // 用于保存字符串
};
String::String(const char* str) {
if (str) {
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
} else {
m_data = new char[1];
*m_data = '\0';
}
}
String::String(const String& other) {
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
}
String::~String() {
delete[] m_data;
}
String String::operator+(const String& str) const {
String newStr;
if (!str.m_data || !strlen(str.m_data)) {
newStr = *this;
} else if (!m_data || !strlen(m_data)) {
newStr = str;
} else {
newStr.m_data = new char[strlen(m_data) + strlen(str.m_data) + 1];
strcpy(newStr.m_data, m_data);
strcat(newStr.m_data, str.m_data);
}
return newStr;
}
String String::operator-(const String& str) const {
String newStr;
if (!str.m_data || !strlen(str.m_data)) {
newStr = *this;
} else if (!m_data || !strlen(m_data)) {
newStr = "";
} else {
char* pos = strstr(m_data, str.m_data);
if (pos) {
int len1 = pos - m_data;
int len2 = strlen(str.m_data);
int len3 = strlen(m_data) - len1 - len2;
newStr.m_data = new char[len1 + len3 + 1];
strncpy(newStr.m_data, m_data, len1);
strncpy(newStr.m_data + len1, pos + len2, len3);
newStr.m_data[len1 + len3] = '\0';
} else {
newStr = *this;
}
}
return newStr;
}
String& String::operator=(const String& str) {
if (this == &str)
return *this;
delete[] m_data;
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data, str.m_data);
return *this;
}
void String::display() const {
cout << m_data << endl;
}
int main() {
String s1("湖北大学 "), s3;
String s2("计算机与信息工程学院欢迎您!");
s3 = s1 + s2;
s3.display();
s3 = s1 - String("学院");
s3.display();
return 0;
}
```
其中,`String` 类重载了运算符 `+`、`-` 和 `=`,并实现了一个打印字符串的方法 `display()`。在 `main()` 函数中,先创建两个字符串 `s1` 和 `s2`,分别初始化为 `"湖北大学 "` 和 `"计算机与信息工程学院欢迎您!"`,然后将它们相加赋值给 `s3`,打印出来即可。接着,将 `s1` 减去 `"学院"` 赋值给 `s3`,再打印出来即可。
阅读全文