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

    运行结果:

  • 相关阅读:
    SQL注入实验-2021.01.24
    数据库的搭建与基本语句2021-01-24
    Linux
    磁盘配置
    在Vmware中Centos下的Hadoop环境搭建
    Linux系统(CentOS)-2021.1.19
    中间件,JavaScript,PHP及burpSuite暴力破解实验-2021.1.16
    html,css学习笔记-2021.1.15
    第一周学习视频(二)
    第一周学习视频(一)
  • 原文地址:https://www.cnblogs.com/cysolo/p/3381266.html
Copyright © 2020-2023  润新知