【描述】 输入一些01串,01串的长度不大于256个字符。将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序。string串大小比较的默认标准是按各字符的ASCII码大小,如果算法中需要改变大小比较的标准,则要自己设计比较函数,使用在sort算法中。根据程序框架,完善程序,补充相应的内容,使之正确运行。 【输入】 输入第一行是正整数n,表示01串的个数。 下面n行是01串,每行一个01串。 【输出】 分行输出排序后的01串
时间: 2024-02-26 16:58:20 浏览: 102
以下是完整的程序代码,其中包括了自定义的比较函数cmp_str用于sort排序时按照要求排序:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp_str(string str1, string str2) {
if (str1.length() != str2.length()) {
return str1.length() < str2.length();
} else {
int cnt1 = count(str1.begin(), str1.end(), '1');
int cnt2 = count(str2.begin(), str2.end(), '1');
if (cnt1 != cnt2) {
return cnt1 < cnt2;
} else {
return str1 < str2;
}
}
}
int main() {
int n;
cin >> n;
vector<string> strs(n);
for (int i = 0; i < n; i++) {
cin >> strs[i];
}
sort(strs.begin(), strs.end(), cmp_str);
for (int i = 0; i < n; i++) {
cout << strs[i] << endl;
}
return 0;
}
```
程序的大致思路是先读入n个01串,然后按照要求定义比较函数cmp_str,最后使用sort函数进行排序,并输出排序后的结果。其中,cmp_str函数的具体实现如下:
1.如果两个字符串长度不同,则按照长度从小到大排序;
2.如果两个字符串长度相同,但是1的个数不同,则按照1的个数从小到大排序;
3.如果两个字符串长度和1的个数都相同,则按照ASCII码值从小到大排序。
最后,我们可以通过测试数据验证程序是否正确。例如,输入:
```
5
0001
111
0011
0101
00
```
输出:
```
00
111
0001
0011
0101
```
可以看到,程序按照要求正确地对01串进行了排序。
阅读全文