菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
239
0

整型数组处理算法(二)文件中有一组整数,要求排序后输出到另一个文件中

原创
05/13 14:22
阅读数 26234

如题,需要将文件里的一组整数,排序后写到另外一个文件中。

思路:

一次读取一个sizeof(int),然后往一个int*数组里写入,写入的时候就比较,进行排序。

然后,在遍历数组,写到文件中。


实现代码如下:

 

#define READ_FILE  "C:\\tempR.txt"
#define WRITE_FILE  "C:\\tempW.txt"


/*按降序排列数组*/
int InsertData(int* a, int nValue, int nCount)
{
	for (int i=0; i<nCount; i++)
	{
		if (a[i]<nValue)
		{
			for (int j=nCount-1; j>i; j--)
			{
				a[j]=a[j-1];
			}

			a[i]=nValue;

			break;//跳出循环
		}
	}
	return 0;
}

/*写数据到文件*/
int WriteData(int* a,  char* pFile,int nCount)
{
	FILE* fpWrite=NULL;
	fpWrite = fopen(pFile, "wb+");
	if (fpWrite!=NULL)
	{
		for (int i=0; i<nCount; i++)
			fwrite((char*)&a[i], sizeof(int), 1, fpWrite);

		fclose(fpWrite);
	}

	return 0;
}

int ProcessData()
{
	FILE* fpRead =NULL;
	int nSize=0;
	int nTemp;
	int nCount=0;
	
	int* a50;//int* a50 = new int[];,这样写会导致R6030 CRT not initialized,错误提示。
		     //这里应该是内存没有申请就使用了。

	fpRead = fopen(READ_FILE, "rb+");

	if (fpRead!=NULL)
	{
		fseek( fpRead, 0L, SEEK_END );
		int nRet = ftell(fpRead); 

		a50 = new int[nRet/sizeof(int)];

		fseek( fpRead, 0L, SEEK_SET );//移到文件头

		nSize = fread((void*)&nTemp, sizeof(int), 1, fpRead);
		while (nSize>0)
		{
			nCount++;

			InsertData(a50, nTemp, nCount);

			
			nSize = fread((void*)&nTemp, sizeof(int), 1, fpRead);
		}

		fclose(fpRead);
	}
	
	WriteData(a50, WRITE_FILE, nCount);

	delete a50;
	a50 = NULL;

	return 0;
}


 


 

int main()
{
/*
//可以执行这个先进行写测试数据到文件
	int* a=new int[10];
	for (int i=0; i<10; i++)
	{
		*(a+i)=i;
	}

	WriteData(a, READ_FILE, 10);

	delete a;
	a = NULL;
*/
	ProcessData();
	return 0;
}


测试结果,就不贴了,有兴趣的朋友可以用代码测试测试,文件是按二进制写的,用UE或其他可以查看二进制的工具打开。

 


在这个过程遇到R6030 CRT not initialized的问题,才改变算法,先读取文件大小,计算整型数个数。关于为什么会出现R6030 CRT not initialized另外写一篇。


转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12040301





 

发表评论

0/200
239 点赞
0 评论
收藏