【c++oj】字符串的加减(运算符重载)
·
题目描述
定义一个字符串类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首次出现的地址)
输入
第1行:输入一个字符串,初始化第一个str对象。
(提示:通过cin. getline(char *,int strCount)可以输入一个字符串到char数组中)
第2行:输入一个字符串,初始化第二个str对象。
输出
第1行:输出两个字符串相加后的长度和字符串。
第2行:输出两个字符串相减后的长度和字符串。
IO模式
本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。
输入样例:
i am a
student!
输出样例:
length=15 i am a student!
length=7 i am a
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
class str {
int length;
char *p;
public:
str() {
};
str(char *s) {
p = new char[strlen(s) + 1];
strcpy(p, s);
}
str(const str &obj) {
length = obj.length;
p = new char[strlen(obj.p) + 1];
strcpy(p, obj.p);
}
~str() {
if (p != NULL) {
delete []p;
}
}
friend str operator+(const str &s1, const str &s2);
friend str operator-(const str &s1, const str &s2);
void operator=(const str &obj) {
strcpy(p, obj.p);
}
void show() {
cout << "length=" << length << " " << p << endl;
}
};
str operator+(const str &s1, const str &s2) {
str ans;
ans.p = new char[strlen(s1.p) + strlen(s2.p) + 1];
strcpy(ans.p, s1.p);
strcat(ans.p, s2.p);
ans.length = strlen(ans.p);
return ans;
}
str operator-(const str &s1, const str &s2) {
str ans;
ans.p = new char[strlen(s1.p) + 1];
char *q = strstr(s1.p, s2.p);
char *t = s1.p;
for (int i = 0; t + i < q; i++) {
ans.p[i] = s1.p[i];
}
ans.length = strlen(ans.p);
return ans;
}
int main() {
char a[30];
char b[30];
cin.getline(a, 30);
cin.getline(b, 30);
str m(a);
str n(b);
str ans = m + n;
ans.show();
str ans2 = ans - n;
ans2.show();
return 0;
}
更多推荐
所有评论(0)