1. 程式人生 > >面向物件程式設計2018上機題(3)

面向物件程式設計2018上機題(3)

/*設計一個類,用於對字串進行管理。要求:

(1)在定義物件時,能夠確定字串的最大長度並清空字串。

(2)定義成員函式input, 用於從鍵盤為字串輸入資料。

(3)定義運算子過載函式,用於判斷兩個物件中的字串是否相同。

(4)定義成員函式exchange,用於互換字串中ASCII碼最大和最小的字元(需考慮字串中存在多個最大和最小字元的情況)。

(5)定義成員函式disp,用於顯示字串。

(6)定義main函式,合理地呼叫上述每個函式。*/
#include <iostream>
#include <Windows.h>
#include <string.h>
using namespace std;

class cString
{
private:
	char *p;
	int num;//記錄字串字數
public:
	cString(int n);
	~cString();
	void input();
	bool operator==(const cString &c);
	void exchange();
	void disp();
};
cString::cString(int n=0)
{
	num = n > 0 ? n : 0;
	p = new char[num];
	memset(p, 0, sizeof(num));
	//strcpy(p, "");/*相當於p[0]=0;只完成了陣列首地址置0*/
}
cString::~cString()
{
	delete[]p;
}
void cString::input()
{
	cout << "請輸入" << num << "字的字串(回車結束):" << endl;
	for (int i = 0; i < num; i++) {
		cin >> p[i];
	}
}
bool cString::operator==(const cString &c)
{
	int flag = 1;
	for (int i = 0; i < num; i++) {
		if (p[i] != c.p[i]) {
			flag = 0;
			cout << "兩字串不相等" << endl;
			return false;
		}
	}
	cout << "兩字串相等" << endl;
	return true;
}
void cString::exchange()
{
	char max_c = p[0];
	char min_c = p[0];
	for (int i = 0; i < num; i++) {
		if (p[i] > max_c) {
			max_c = p[i];
		}
		else if (p[i] < min_c) {
			min_c = p[i];
		}
	}
	if (max_c == min_c) {
		cout << "該字串中所有字元相同,無最大或最小字元" << endl;
	}
	else {
		for (int i = 0; i < num; i++) {
			if (p[i] == max_c) {
				p[i] = min_c;
			}
			else if (p[i] == min_c) {
				p[i] = max_c;
			}
		}
	}
}
void cString::disp()
{
	for (int i = 0; i < num && p[i] != '\0'; i++) {
		cout << p[i];
	}
	cout << endl;
}
int main()
{
	int n = 0;
	cout << "請輸入需要字串個數n:" ;
	cin >> n;
	cString c1(n);
	c1.input();

	cout << "請輸入需要字元個數n:";
	cin >> n;
	cString c2(n);
	c2.input();

	cString c3 = c1;

	cout << "c1==c2 ?" << endl;
	c1 == c2;
	cout << "c1==c3 ?" << endl;
	c1 == c3;

	c1.exchange();
	c1.disp();
	system("pause");
	return 0;
}