#include<bits/stdc++.h> using namespace std; string l,r,ci;//l是左r是右 int n; int main() { cin>>n; for(int i=0;i<n;i++) { cin>>ci[i]; if(ci[i]%2==0) r[i]=ci[i]; else if(ci[i]%2!=0) l[i]=ci[i]; } int rn=strlen(r); int ln=strlen(l); sort(r,r+rn); sort(l,l+ln); for(int i=0;i<ln;i++) { cout<<l[i]<<" "; } for(int i=rn;i>=0;i++) { cout<<r[i]<<" "; } return 0; }这个有什么问题
时间: 2023-06-21 13:20:41 浏览: 62
这段代码有一些问题:
1. 在输入字符串 ci 时,没有指定其长度,会导致数组越界的问题。应该使用 vector<string> 来动态存储输入的字符串。
2. 在判断 ci[i] 是否为偶数时,应该使用 ci[i]-'0' 来将字符转换为数字,否则会出现逻辑错误。
3. 在将偶数放入 r 数组和奇数放入 l 数组时,没有考虑数组下标的问题,会导致数组越界的问题。应该使用 vector<int> 来存储偶数和奇数。
4. 在输出偶数时,应该从 rn-1 开始倒序输出,否则会输出一个未初始化的元素。
下面是修改后的代码:
```c++
#include<bits/stdc++.h>
using namespace std;
vector<string> ci; // 存储字符串
vector<int> l, r; // 存储奇数和偶数
int main() {
int n;
cin >> n;
ci.resize(n); // 设置字符串长度
for(int i = 0; i < n; i++) {
cin >> ci[i];
int num = ci[i][ci[i].size() - 1] - '0'; // 将字符转换为数字
if(num % 2 == 0)
r.push_back(num); // 存储偶数
else
l.push_back(num); // 存储奇数
}
sort(r.begin(), r.end()); // 排序偶数
sort(l.begin(), l.end()); // 排序奇数
for(int i = 0; i < l.size(); i++)
cout << l[i] << " ";
for(int i = r.size() - 1; i >= 0; i--)
cout << r[i] << " ";
return 0;
}
```