将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;
}