设计字符串类CSTRING,包含私有成员数据p(char *p)。根据给定的main函数设计必要的成员函数。int main() {int n,i,j; while(cin>>n) {CSTRING *c=new CSTRING[n+2]; for(i=0;i<n;i+ +) {cin>>c[i]; } for(=O;i<n-1;i+ +) for(j=0;j<n-i-1;j++) if(C[j]>C[j+1]) {c[n]=c[j]; c[j]=c[j+1]; C[j+1]=c[N]; } for(i=O;i<n;i++) c[n+1]+=c[i]; cout< <c[n+1]<<endl;, delete[]C; return O; } retunr 0; }输入: 3 aaa ccc bbb 输出: --aaa--bbb--ccc
时间: 2024-01-21 22:04:48 浏览: 73
好的,我可以解释这段代码的功能并为你设计出CSTRING类。
这段代码的主要功能是读取n个字符串,将它们按字典序排序,然后将它们拼接成一个新的字符串,并在每个字符串前后加上"--",最后输出这个新的字符串。
下面是CSTRING类的设计:
```c++
#include <cstring>
#include <iostream>
using namespace std;
class CSTRING {
private:
char* p;
public:
CSTRING() {
p = new char[1];
p[0] = '\0';
}
CSTRING(const char* str) {
p = new char[strlen(str) + 1];
strcpy(p, str);
}
CSTRING(const CSTRING& str) {
p = new char[strlen(str.p) + 1];
strcpy(p, str.p);
}
~CSTRING() {
delete[] p;
}
const char* c_str() const {
return p;
}
friend bool operator<(const CSTRING& a, const CSTRING& b) {
return strcmp(a.p, b.p) < 0;
}
friend istream& operator>>(istream& is, CSTRING& str) {
char buf[1024];
is >> buf;
str = CSTRING(buf);
return is;
}
friend ostream& operator<<(ostream& os, const CSTRING& str) {
os << "--" << str.p << "--";
return os;
}
friend CSTRING operator+(const CSTRING& a, const CSTRING& b) {
CSTRING result;
delete[] result.p;
result.p = new char[strlen(a.p) + strlen(b.p) + 1];
strcpy(result.p, a.p);
strcat(result.p, b.p);
return result;
}
};
```
这个类重载了输入输出运算符和小于运算符,同时还实现了字符串的拼接功能。
在主函数中,我们创建了n个CSTRING对象,然后通过输入运算符为它们赋值。接着,我们对这些字符串排序,然后通过加法运算符将它们拼接成一个新的字符串,并在每个字符串前后加上"--"。最后输出这个新的字符串。
完整代码如下:
```c++
#include <cstring>
#include <iostream>
using namespace std;
class CSTRING {
private:
char* p;
public:
CSTRING() {
p = new char[1];
p[0] = '\0';
}
CSTRING(const char* str) {
p = new char[strlen(str) + 1];
strcpy(p, str);
}
CSTRING(const CSTRING& str) {
p = new char[strlen(str.p) + 1];
strcpy(p, str.p);
}
~CSTRING() {
delete[] p;
}
const char* c_str() const {
return p;
}
friend bool operator<(const CSTRING& a, const CSTRING& b) {
return strcmp(a.p, b.p) < 0;
}
friend istream& operator>>(istream& is, CSTRING& str) {
char buf[1024];
is >> buf;
str = CSTRING(buf);
return is;
}
friend ostream& operator<<(ostream& os, const CSTRING& str) {
os << "--" << str.p << "--";
return os;
}
friend CSTRING operator+(const CSTRING& a, const CSTRING& b) {
CSTRING result;
delete[] result.p;
result.p = new char[strlen(a.p) + strlen(b.p) + 1];
strcpy(result.p, a.p);
strcat(result.p, b.p);
return result;
}
};
int main() {
int n, i, j;
while (cin >> n) {
CSTRING* c = new CSTRING[n + 2];
for (i = 0; i < n; i++) {
cin >> c[i];
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (c[j] > c[j + 1]) {
swap(c[j], c[j + 1]);
}
}
}
CSTRING result;
for (i = 0; i < n; i++) {
result = result + c[i];
}
cout << result << endl;
delete[] c;
}
return 0;
}
```
希望能对你有所帮助!
阅读全文
相关推荐


















