#include<iostream> #include<cstring> using namespace std; class CSTRING { private: char *p; public: CSTRING() { p = NULL; } 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() { if (p != NULL) { delete[] p; } } bool operator > (const CSTRING &str) const { return strcmp(p, str.p) > 0; } CSTRING& operator += (const CSTRING &str) { char *temp = new char[strlen(p) + strlen(str.p) + 1]; strcpy(temp, p); strcat(temp, str.p); if (p != NULL) { delete[] p; } p = temp; return *this; } friend istream& operator >> (istream &in, CSTRING &str) { char temp[100]; in >> temp; str = CSTRING(temp); return in; } friend ostream& operator << (ostream &out, const CSTRING &str) { out << "--" << str.p << "--"; return out; } }; int main() { #ifdef _CRT_SECURE_NO_WARNINGS freopen("./in.txt", "r", stdin); freopen("./out.txt", "w", stdout); #endif 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-1-i;j++) if(c[j]>c[j+1]) { c[n]=c[j]; c[j]=c[j+1]; c[j+1]=c[n]; } for(i=0;i<n;i++) { c[n+1]+=c[i]; } cout<<c[n+1]<<endl; delete[] c; } return 0; },优化一下这段代码
时间: 2024-01-18 15:02:35 浏览: 114
这段代码可以优化的地方有:
1. 在字符串比较时,可以使用 string 类型代替 char* 类型,这样会更加方便和安全。
2. 在读入字符串时,可以使用 getline() 函数代替 >> 运算符,因为 getline() 函数可以读入包括空格在内的整行字符串。
3. 在排序时,可以使用 sort() 函数代替手写冒泡排序,因为 sort() 函数可以更快速地完成排序操作。
优化后的代码如下:
```c++
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
class CSTRING {
private:
string str;
public:
CSTRING() {}
CSTRING(const char* s) : str(s) {}
CSTRING(const string& s) : str(s) {}
bool operator > (const CSTRING& s) const {
return str > s.str;
}
CSTRING& operator += (const CSTRING& s) {
str += s.str;
return *this;
}
friend istream& operator >> (istream& in, CSTRING& s) {
getline(in, s.str);
return in;
}
friend ostream& operator << (ostream& out, const CSTRING& s) {
out << "--" << s.str << "--";
return out;
}
};
int main() {
#ifdef _CRT_SECURE_NO_WARNINGS
freopen("./in.txt", "r", stdin);
freopen("./out.txt", "w", stdout);
#endif
int n;
while (cin >> n) {
CSTRING* c = new CSTRING[n];
for (int i = 0; i < n; i++) {
cin >> c[i];
}
sort(c, c + n, greater<CSTRING>());
CSTRING sum;
for (int i = 0; i < n; i++) {
sum += c[i];
}
cout << sum << endl;
delete[] c;
}
return 0;
}
```
阅读全文