设为首页 加入收藏

TOP

C++实现01串排序
2014-11-24 02:31:50 来源: 作者: 【 】 浏览:1
Tags:实现 排序

题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序。

输入描述:输入数据中含有一些01串,01串的长度不大于256个字符。

输出描述:重新排列01串的顺序,使得串按题目描述的方式排序。

题目分析:

(1)定义一个多重集合容器,该容器的元素类型为string,采用设定的比较函数

(2)因为元素是string而非结构体,所以可以编写比较函数,重载“()”操作符。对于参与比较的每两个字符串,若他们长度不同,则按长度由小到大返回;若他们长度相同,则计算每个字符串中‘1’的个数,若‘1’的个数不同,则按‘1’的个数从少到多返回;若‘1’的个数相同,则按ASCII码值,即字符串的大小从小到大返回。

参考代码:



#include


#include


#include


#include


#include



using namespace std;



struct Comp


{


bool operator()(const string &s1,const string &s2)


{


if(s1.length()!=s2.length()) return s1.length()

int c1=count(s1.begin(),s1.end(),'1');


int c2=count(s2.begin(),s2.end(),'1');


return (c1!=c2 c1

}


};



int main(int argc,char * argv[])


{


multiset ms;


string s;


while(cin>>s)


{


ms.insert(s);


if(cin.get()=='\n')


{


break;


}


}


for(multiset::iterator it=ms.begin();it!=ms.end();it++)


{


cout<<*it<

}


system("pause");


return 0;


}


运行结果:



推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++实现按绩点排名 下一篇C++判断五位以内的对称素数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: