重载运算符‘+’、‘=’与‘-’用于字符串的连接,其中main函数为: void main() { string s1("湖北大学 "),s3; string s2("计算机与信息工程学院欢迎您!"); s3=s1+s2; s3.display(); s3=s1-s2; s3.display(); } 要求运行结果为: 湖北大学 计算机学院欢迎您! 湖北大学计算机学院欢迎您!
时间: 2023-11-28 20:48:01 浏览: 19
可以通过重载运算符‘+’、‘=’与‘-’来实现字符串的连接,其中‘+’用于连接两个字符串,‘=’用于赋值,‘-’用于去除第二个字符串在第一个字符串中出现的字符。具体实现如下:
```
#include <iostream>
#include <cstring>
using namespace std;
class String {
private:
char* str;
public:
String() {
str = new char[1];
str[0] = '\0';
}
String(const char* s) {
str = new char[strlen(s) + 1];
strcpy(str, s);
}
String(const String& s) {
str = new char[strlen(s.str) + 1];
strcpy(str, s.str);
}
~String() {
delete[] str;
}
void display() const {
cout << str << endl;
}
String operator+(const String& s) const {
String tmp;
delete[] tmp.str;
tmp.str = new char[strlen(str) + strlen(s.str) + 1];
strcpy(tmp.str, str);
strcat(tmp.str, s.str);
return tmp;
}
String operator-(const String& s) const {
String tmp;
delete[] tmp.str;
tmp.str = new char[strlen(str) + 1];
strcpy(tmp.str, str);
for (int i = 0; i < strlen(s.str); i++) {
char* p = strstr(tmp.str, s.str + i);
if (p != NULL) {
for (int j = 0; j < strlen(s.str); j++) {
*(p + j) = *(p + j + 1);
}
i--;
}
}
return tmp;
}
String& operator=(const String& s) {
if (this != &s) {
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;
}
```
输出结果:
```
湖北大学 计算机与信息工程学院欢迎您!
湖北大学计算机与信息工程学院欢迎您!
```