Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C++实现01串排序

题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序。
 
输入描述:输入数据中含有一些01串,01串的长度不大于256个字符。
 
输出描述:重新排列01串的顺序,使得串按题目描述的方式排序。
 
题目分析:
 
(1)定义一个多重集合容器,该容器的元素类型为string,采用设定的比较函数
 
(2)因为元素是string而非结构体,所以可以编写比较函数,重载“()”操作符。对于参与比较的每两个字符串,若他们长度不同,则按长度由小到大返回;若他们长度相同,则计算每个字符串中‘1’的个数,若‘1’的个数不同,则按‘1’的个数从少到多返回;若‘1’的个数相同,则按ASCII码值,即字符串的大小从小到大返回。
 
参考代码:
#include <fstream>#include <iostream>#include <string>#include <set>#include <algorithm> using namespace std; struct Comp{    bool operator()(const string &s1,const string &s2)    {       if(s1.length()!=s2.length()) return s1.length()<s2.length();       int c1=count(s1.begin(),s1.end(),"1");       int c2=count(s2.begin(),s2.end(),"1");       return (c1!=c2?c1<c2:s1<s2);    }}; int main(int argc,char * argv[]){    multiset<string,Comp> ms;    string s;    while(cin>>s)    {        ms.insert(s);        if(cin.get()==" ")        {            break;        }    }    for(multiset<string,Comp>::iterator it=ms.begin();it!=ms.end();it++)    {        cout<<*it<<endl;    }    system("pause");    return 0;}运行结果:推荐阅读:C/C++程序内存分配详解 http://www.linuxidc.com/Linux/2013-10/91628.htmC++程序的内存布局 http://www.linuxidc.com/Linux/2013-02/79404.htm