歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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()=='\n')

        {

            break;

        }

    }

    for(multiset<string,Comp>::iterator it=ms.begin();it!=ms.end();it++)

    {

        cout<<*it<<endl;

    }

    system("pause");

    return 0;

}

運行結果:

Copyright © Linux教程網 All Rights Reserved