题目描述

定义一个字符串类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;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐