对于给定若干由0、1构成的字符串(长度不超过80),要求将它们按1的个数从小到大排序。若1的个数相同,则按字符串本身从小到大排序。 要求至少使用一个自定义函数。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct str
{
char arr[100];
int sum;
}str;
int res(char a[])
{ int sum=0;
for(int i=0;i<strlen(a);i++)
{
if(a[i]=='1')
sum++;
}
return sum;
}
int inc( const void *a ,const void *b)
{
if((* (str * )a).sum != ( * (str * )b).sum)
return ( * (str * )a).sum > ( * (str * )b).sum ? 1 : -1;
else
return strcmp((* (str * )a).arr ,( * (str * )b).arr);
}
/*int inc( const void *a ,const void *b)
{
return ( * (str * )a).sum > ( * (str * )b).sum ? 1 : -1;
}*/
int main()
{int res(char a[]);
int inc( const void *a ,const void *b);
int n;
scanf("%d",&n);
struct str num[n];
int i=0;
while(i<n)
{
scanf("%s",&num[i].arr);
num[i].sum=res(num[i].arr);
i++;
}
qsort(num, n, sizeof(str), inc);
for(int i=0;i<n;i++)
{printf("%d",num[i].sum);
printf("%s\n",num[i].arr);
}
}