您的位置:首页 > 其它

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

2013-09-26 21:41 513 查看
如题,需要将文件里的一组整数,排序后写到另外一个文件中。思路:一次读取一个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另外写一篇。转载请注明原创链接:/article/1385469.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: