/*设计一个类,用于对字符串进行管理。要求:
(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;
}