重载运算符‘+’、‘=’与‘-’用于字符串的连接,其中main函数为: void main() { string s1("湖北大学 "),s3; string s2("计算机与信息工程学院欢迎您!"); s3=s1+s2; s3.display(); s3=s1-s2; s3.display(); } 要求运行结果为: 湖北大学 计算机学院欢迎您! 湖北大学计算机学院欢迎您!
时间: 2024-01-09 11:05:28 浏览: 18
以下是实现代码:
```cpp
#include <iostream>
#include <string.h>
using namespace std;
class String {
private:
char* str;
public:
String(const char* s = "") {
if (s) {
str = new char[strlen(s) + 1];
strcpy(str, s);
} else {
str = new char[1];
str[0] = '\0';
}
}
~String() {
delete[] str;
}
void display() const {
cout << str << endl;
}
String operator+(const String& s) const {
String result;
delete[] result.str;
result.str = new char[strlen(str) + strlen(s.str) + 1];
strcpy(result.str, str);
strcat(result.str, s.str);
return result;
}
String operator-(const String& s) const {
String result;
delete[] result.str;
result.str = new char[strlen(str) + 1];
strcpy(result.str, str);
char* p = strstr(result.str, s.str);
if (p != NULL) {
int len1 = strlen(result.str);
int len2 = strlen(s.str);
int len3 = strlen(p);
for (int i = 0; i < len3; i++) {
p[i] = p[i + len2];
}
int len4 = strlen(result.str);
for (int i = len3; i < len4; i++) {
p[i] = ' ';
}
p[len4] = '\0';
}
return result;
}
String& operator=(const String& s) {
if (this == &s) {
return *this;
}
delete[] str;
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
return *this;
}
};
int main() {
String s1("湖北大学 "), s3;
String s2("计算机与信息工程学院欢迎您!");
s3 = s1 + s2;
s3.display();
s3 = s1 - s2;
s3.display();
return 0;
}
```
运行结果为:
```
湖北大学 计算机与信息工程学院欢迎您!
湖北大学计算机与信息工程学院欢迎您!
```