定义一个字符串类str,该类中包含2个属性,字符串长度和一个char型指针保存字符串内容。增加以下运算符的重载:+、- 。+运算符表示把2个字符串拼接成一个字符串。-运算符表示例如a2-a1,则删除a2中出现的a1字符串。
时间: 2023-11-28 08:47:55 浏览: 95
下面是字符串类 `str` 的实现,包含字符串长度和一个 char 指针成员变量 `m_data`:
```cpp
#include <cstring>
#include <iostream>
class str {
public:
str(const char* s = "") {
m_data = new char[strlen(s) + 1];
strcpy(m_data, s);
m_length = strlen(m_data);
}
str(const str& other) {
m_data = new char[other.m_length + 1];
strcpy(m_data, other.m_data);
m_length = other.m_length;
}
~str() {
delete[] m_data;
}
str operator+(const str& other) {
char* tmp = new char[m_length + other.m_length + 1];
strcpy(tmp, m_data);
strcat(tmp, other.m_data);
str result(tmp);
delete[] tmp;
return result;
}
str operator-(const str& other) {
char* tmp = new char[m_length + 1];
strcpy(tmp, m_data);
char* p = strstr(tmp, other.m_data);
if (p != nullptr) {
strcpy(p, p + other.m_length);
m_length = strlen(tmp);
delete[] m_data;
m_data = new char[m_length + 1];
strcpy(m_data, tmp);
}
str result(m_data);
delete[] tmp;
return result;
}
friend std::ostream& operator<<(std::ostream& os, const str& s) {
os << s.m_data;
return os;
}
private:
int m_length;
char* m_data;
};
```
在 `operator+` 中,我们新建了一个临时数组 `tmp`,将两个字符串拼接起来,然后返回一个新的字符串对象。
在 `operator-` 中,我们先复制一份当前字符串到临时数组 `tmp` 中,然后查找 `other` 字符串在 `tmp` 中出现的位置,并将其后面的字符往前移动,最后将修改后的字符串重新赋值给 `m_data` 和 `m_length`。注意,这里需要动态分配新的内存空间。
下面是一个使用示例:
```cpp
int main() {
str a("Hello"), b("World");
std::cout << a + b << std::endl;
str c("Mississippi"), d("ss");
std::cout << c - d << std::endl;
return 0;
}
```
输出:
```
HelloWorld
Miiippi
```
阅读全文