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


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

    思路:

    一次读取一个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





  • 相关阅读:
    用C#设置系统时间和本地时间
    在ASP.NET中使用Session常见问题集锦 收藏
    C#开源资源大汇总(2)
    漫谈ASP.NET设计中的性能优化问题
    比较著名的.net技术论坛名称(含国外的)
    在ASP.NET 2.0中,一个ASP.NET页面的生命周期
    DataGrid技巧大集合(转载)
    Silverlight经典教程书籍汇总
    Asp.Net细节性问题技巧精萃
    C#开源资源大汇总(1)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3341604.html
Copyright © 2020-2023  润新知