将01串首先按照长度排序,其次按1的个数的多少排序,最后按ASCII码排序。
输入样例:
10011111
00001101
10110101
1
0
1100
输出样例:
0
1
1100
1010101
00001101
10011111
#include<fstream>
#include<iostream>
#include<string>
#include<set>
using namespace std;
int oneNum(string);
struct stringComp{
bool operator()(const string &s1, const string &s2){
int lengths1 = s1.length();
int lengths2 = s2.length();
if (lengths1 != lengths2)
return lengths1 < lengths2;
int ones1 = oneNum(s1);
int ones2 = oneNum(s2);
return ones1 != ones2 ? ones1 < ones2 : s1 < s2;
}
};
int main(){
ifstream cin("data.txt");
string s;
set<string, stringComp> sset;
while(cin >> s){
sset.insert(s);
}
for(set<string, stringComp>::iterator it = sset.begin(); it != sset.end(); ++it)
cout << *it << endl;
return 0;
}
int oneNum(string s){
int num = 0;
for(int i = 0; i < s.length() -1; ++i){
if(s[i] == '1')
++num;
}
return num;
}