设计字符串类CSTRING,包含私有成员数据p(char *p)。根据给定的main函数设计必要的成员函数。int main. int n,i,j; while(cin>>n) { CSTRING *c=new CSTRING[n+2]; for(i=0;|<n;i++) { cin>>cO; for(i=0:i<n-1;i++) for(j=0;j<n-i-1;++) if(cO]>c[+1]) { c[n]=cOl: cU]=c[+1]; C[+1]=c[n]; } for(i=0;i<n;i++) C[n+1]+=c[J; cout<<c[n+1]<<endi; delete c; } return O; }
时间: 2024-01-20 12:03:08 浏览: 90
c++设计实现一个"字符串类",要求系统设计具有一定弹性和可扩展性,使得后续维护和扩展功能更容易,增加或修改系统功能变得更简单。
5星 · 资源好评率100%
根据给定的main函数,需要设计CSTRING类的默认构造函数、带参构造函数、析构函数和赋值运算符重载函数。具体实现如下:
```cpp
class CSTRING {
private:
char *p;
public:
// 默认构造函数
CSTRING() {
p = nullptr;
}
// 带参构造函数
CSTRING(const char *str) {
if (str != nullptr) {
int len = strlen(str);
p = new char[len + 1];
strcpy(p, str);
} else {
p = nullptr;
}
}
// 拷贝构造函数
CSTRING(const CSTRING &cstr) {
if (cstr.p != nullptr) {
int len = strlen(cstr.p);
p = new char[len + 1];
strcpy(p, cstr.p);
} else {
p = nullptr;
}
}
// 析构函数
~CSTRING() {
if (p != nullptr) {
delete[] p;
p = nullptr;
}
}
// 赋值运算符重载
CSTRING &operator=(const CSTRING &cstr) {
if (this == &cstr) {
return *this;
}
if (cstr.p != nullptr) {
int len = strlen(cstr.p);
if (p != nullptr) {
delete[] p;
}
p = new char[len + 1];
strcpy(p, cstr.p);
} else {
if (p != nullptr) {
delete[] p;
}
p = nullptr;
}
return *this;
}
};
```
然后根据main函数中的代码,我们可以完成如下的C++程序:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
class CSTRING {
private:
char *p;
public:
// 默认构造函数
CSTRING() {
p = nullptr;
}
// 带参构造函数
CSTRING(const char *str) {
if (str != nullptr) {
int len = strlen(str);
p = new char[len + 1];
strcpy(p, str);
} else {
p = nullptr;
}
}
// 拷贝构造函数
CSTRING(const CSTRING &cstr) {
if (cstr.p != nullptr) {
int len = strlen(cstr.p);
p = new char[len + 1];
strcpy(p, cstr.p);
} else {
p = nullptr;
}
}
// 析构函数
~CSTRING() {
if (p != nullptr) {
delete[] p;
p = nullptr;
}
}
// 赋值运算符重载
CSTRING &operator=(const CSTRING &cstr) {
if (this == &cstr) {
return *this;
}
if (cstr.p != nullptr) {
int len = strlen(cstr.p);
if (p != nullptr) {
delete[] p;
}
p = new char[len + 1];
strcpy(p, cstr.p);
} else {
if (p != nullptr) {
delete[] p;
}
p = nullptr;
}
return *this;
}
// 获取字符串长度
int length() const {
if (p != nullptr) {
return strlen(p);
} else {
return 0;
}
}
// 字符串比较
bool operator>(const CSTRING &cstr) const {
if (p == nullptr) {
return false;
}
if (cstr.p == nullptr) {
return true;
}
return strcmp(p, cstr.p) > 0;
}
// 字符串输出
friend ostream &operator<<(ostream &out, const CSTRING &cstr) {
if (cstr.p != nullptr) {
out << cstr.p;
}
return out;
}
};
int main() {
int n, i, j;
while (cin >> n) {
CSTRING *c = new CSTRING[n + 2];
for (i = 0; i < n; i++) {
char s[100];
cin >> s;
c[i] = CSTRING(s);
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (c[j] > c[j + 1]) {
CSTRING tmp = c[j];
c[j] = c[j + 1];
c[j + 1] = tmp;
}
}
}
CSTRING result;
for (i = 0; i < n; i++) {
result = result + c[i];
}
cout << result << endl;
delete[] c;
}
return 0;
}
```
该程序可以读入多组测试数据,每组数据包括一个整数n和n个字符串,将这n个字符串按字典序从小到大排序后输出它们的拼接结果。
阅读全文