| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
xwfw
10年前发布

C++对文本里面的大量数据进行排序(shell,c++,fopen,awk,sed)

    #/bin/bash        #对文本里面的数据进行排序        awk 'BEGIN{            RS=","        }        {print $0}        END{        }'<a | sort -n | sed '/^$/ d' | awk 'BEGIN{            RS="\n";ORS=","        }        {print $0}        END{        }'|sed 's/,$//g'                                下面是c++版本的。        ----------------------------------------------------------------------                #include <iostream>        #include <stdio.h>        #include <stdlib.h>        using namespace std;                template<int _N>        class Bitset        {            public:            Bitset()            {                    _Tidy();//调用_Tidy()函数会初始化所有位为0.            }            void Show()//显示01位.            {                for(int _I=0;_I<_N;_I++)                {                    cout<<(test(_I)?'1':'0');                }            }            bool test(int _P)//测试该位置是否为真(1).            {                int _I = _P/32;                return (A[_I]>>(_P%32))&0x1;            }            void _Tidy()            {                for(int _I=0;_I<_W;_I++)                {                    A[_I] = 0;                  }            }            void set(int _P)//将_p下标设置为1.            {                int _I = _P/32;                A[_I] |= (0x1<<(_P%32));            }            void printf()            {                for(int _I=0;_I<_N;_I++)                {                    test(_I) && (cout<<_I<<"  ");                }            }//打印排列结果.            private:          typedef long LONG;//以long的4个字节为一个单位数组.            enum{_Nw=(_N-1)/(sizeof(LONG)*8),                        _W=_Nw+1};            int A[_W];        };        template<int _N>        void deal_what(int &sum,char c,Bitset<_N> &a,FILE *&out)        {            if(c!=' ' && c!=',' && c!='\n')            {                sum=(sum*10+(c-'0'));                           return ;                }            else{                a.set(sum);//将数据设置到指定位中。            }            sum = 0;        }                template<int _N>        void get_result(Bitset<_N> &a,FILE *&out)        {            int sum = 0;            while(1)            {                char c = fgetc(out);                if(c==EOF)                {                    return;                }                deal_what<_N>(sum,c,a,out);            }        }                int get_value(int x,int &n)//求数字位数        {            x && (n=get_value(x/10,n)+1);            return n;        }                template<int _N>        void in_put(Bitset<_N> &a,FILE *&in)//往文件b里面写入结果。        {            for(int _I=0;_I<_N;_I++)            {                if(a.test(_I))                 {                    int _H=_I;                    int _K = 0;                    get_value(_H,_K);                    int flog = _K;                    int save=0;                    while(1)                    {                     int sum=1;                     for(int _J=_K;_J>0;_J--)                     {                        sum*=10;                     }                     char c = ((_H-save*sum)/(sum/10))+'0';                     save = _H/(sum/10);                         fputc(c,in) ;                     flog--;                     _K--;                     if(flog==0)                            break;                    }                fputc(' ',in);                    }                }        }        int main()        {            FILE *out = fopen("a","a+");            FILE *in = fopen("b","a+");          Bitset<100> a;              get_result(a,out);            in_put(a,in);            fclose(out);            fclose(in);        }