C++下如何从读取文件内的数据并且排序然后输出到另外一个文件
#include
#include
#include
#include
#pragma warning (disable:4996)
int create_a()//建立一个a.txt文件
{
srand((unsigned int)time(NULL));//通过time产生一个随机的整数,利用这个随机整数与srand的函数产生随机种子
FILE *p = fopen("a.txt", "w");//以只写方式打开a.txt文件
if (p == NULL)
return 0;//如果打开失败,主函数返回
for (int i = 0; i < 10; i++)
{
fprintf(p, "%d\n", rand());//将随机数写入文件
}
fclose(p);//操作完成之后关闭文件
return 0;
}
int read_a(int array[], int len)//读取a.txt
{
FILE *p = fopen("a.txt", "r");//用只读方式打开a.txt文件
if (p == NULL)//文件打开失败,主函数返回
return 0;
int i = 0;
while (!feof(p) && len--)//如果读到文件结尾,那么循环退出
{
int value = 0;
fscanf(p, "%d", &value);//从a.txt中读取一行,放入变量value中
array[i] = value;//将value赋值给array[i]
i++;
}
fclose(p);
return i;//返回a.txt文件有多少行
}
void print_array(int array[], int len)//循环遍历数组,将数组每个成员都打印出来
{
for (int i = 0; i < len; i++)
{
printf("array[%d] = %d\n", i, array[i]);
}
}
void bubble(int array[], int len)//用冒泡法排序
{
for (int i = 0; i < len; i++)
{
for (int j = 1; j < len - i; j++)
{
if (array[j] < array[j - 1])//如果array[j]小于他前面的元素,那么就和前面的元素调换位置
{
int tmp = array[j];
array[j] = array[j - 1];
array[j - 1] = tmp;
}
}
}
}
int write_b(int array[], int len)//将数组array写入b.txt文件
{
FILE *p = fopen("b.txt", "w");//以只写的方式打开a.txt
if (p == NULL)
return;
for (int i = 0; i < len; i++)//循环将数组中有效元素写入b.txt
{
fprintf(p, "%d\n", array[i]);
}
fclose(p);//关闭文件
return 0;
}
int main()
{
int array[100] = { 0 };
int len = read_a(array, sizeof(array) /sizeof(int));//读a.txt文件内容,并保存如数组array
//print_array(array, len);
bubble(array, len);//用冒泡将数组内容排序
//printf("------------------------\n");
write_b(array, len);//将排序后数组的结果写入b.txt
getchar();
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。