定义一个字符串类str,该类中包含2个属性,字符串长度和一个char型指针保存字符串内容。增加以下运算符的重载:+、- 。+运算符表示把2个字符串拼接成一个字符串。-运算符表示例如a2-a1,则删除a2中出现的a1字符串。 要求如下: 1.实现str类; 2.编写main函数,初始化2个str对象A、B,输出这2个对象相加后的对象C的结果信息。输出C与B之间相减后的结果信息。 (提示:strstr(char *a,char*b)可以从a字符串中查找出b首次出现的地址)
时间: 2023-11-28 08:48:34 浏览: 92
C++实现将一个字符串中的字符替换成另一个字符串的方法
以下是一个可能的实现:
```cpp
#include <cstring>
#include <iostream>
class str {
public:
str(const char* s = "") {
len = strlen(s);
data = new char[len + 1];
strcpy(data, s);
}
str(const str& other) {
len = other.len;
data = new char[len + 1];
strcpy(data, other.data);
}
~str() {
delete[] data;
}
str operator+(const str& other) const {
str result;
result.len = len + other.len;
result.data = new char[result.len + 1];
strcpy(result.data, data);
strcat(result.data, other.data);
return result;
}
str operator-(const str& other) const {
str result;
char* p = strstr(data, other.data);
if (p == nullptr) {
result = *this;
} else {
result.len = len - other.len;
result.data = new char[result.len + 1];
strncpy(result.data, data, p - data);
strcpy(result.data + (p - data), p + other.len);
}
return result;
}
friend std::ostream& operator<<(std::ostream& out, const str& s);
private:
int len;
char* data;
};
std::ostream& operator<<(std::ostream& out, const str& s) {
out << s.data;
return out;
}
int main() {
str A("Hello"), B(" World"), C;
C = A + B;
std::cout << "A + B = " << C << std::endl;
str D("llo");
C = C - D;
std::cout << "C - D = " << C << std::endl;
return 0;
}
```
这里使用了字符串库函数 `strlen`, `strcpy`, `strcat`, `strstr`, `strncpy`。需要注意的是,`strncpy` 函数必须指定复制的字符数,因为源字符串可能比目标字符串短,在这种情况下需要用空字符填充剩余的空间。
阅读全文