#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool MyComp(const string &s1, const string &s2)
{
long c1 = count(s1.begin(), s1.end(), '1');
long c2 = count(s2.begin(), s2.end(), '1');
return c1 != c2 ? c1 < c2 : s1 < s2;
}
int main()
{
vector<string> vstr;
string str;
int n;
while (cin >> n)
{
vstr.clear();
while (n--)
{
cin >> str;
vstr.push_back(str);
}
sort(vstr.begin(), vstr.end(), MyComp);
for (vector<string>::iterator it = vstr.begin(); it < vstr.end(); it++)
{
cout << *it << endl;
}
}
return 0;
}
供参考:
#include <stdio.h>
#include <string.h>
int cnt(char *s)
{
int i ,cnt;
for(i = 0,cnt = 0;s[i] != '\0';i++)
if(s[i] == '1') cnt++;
return cnt;
}
void sort(char** s,int n)
{
int i ,j;
char tmp[81];
for(i = 0;i < n -1; i++){
for(j = 0;j < n - 1 - i; j++){
if(cnt(s[j]) > cnt(s[j+1])){
strcpy(tmp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],tmp);
}
else if(cnt(s[j]) == cnt(s[j+1])
&& strcmp(s[j],s[j+1]) > 0){
strcpy(tmp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],tmp);
}
}
}
}
int main()
{
char** str;
int n , i;
while (scanf("%d", &n) == 1){ //输入 ctrl + z 结束输入
str = (char**)malloc(sizeof(char*)*n);
for(i = 0;i < n; i++)
str[i] = (char*)malloc(sizeof(char)*81);
i = 0;
getchar();
while (n--){
gets(str[i]);
i++;
}
sort(str,i);
for(n = 0;n < i; n++)
puts(str[n]);
}
return 0;
}
不就是把使用STL的部分换成手写或者C库函数