码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-29 11:53:20      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

#/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);
}

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

标签:

原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45362255

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!