文件data.txt中有一个已排好序的整数序列,main 函数中定义1个有8个元素的一维整型数组a,从data.txt文件中读入数据赋给数组a,然后从键盘输入一个整数,要按原来排序的规律将它插入数组a中,再将插入后数组a中的值写到文件data.txt中
#include <algorithm>
#include <fstream>
#include <functional>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
int main()
{
const std::string filePath("D:\\data.txt");
using compare = std::less<int>;
std::ifstream in(filePath);
std::set<int, compare> data;
std::copy(std::istream_iterator<int>(in),
std::istream_iterator<int>(),
std::inserter(data, data.begin()));
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::inserter(data, data.begin()));
std::ofstream out(filePath);
std::copy(data.begin(), data.end(),
std::ostream_iterator<int>(out, " "));
return 0;
}
一个实现,供参考:
#include <stdio.h>
int main(void){
FILE * fp = fopen("f:\\data.txt","r");
if(fp==NULL){
printf("文件不存在或打开失败,程序退出!\n");
return 0;
}
int a[8];
int i=0;
while(i<8){ //从文件读取8个整数到数组a
fscanf(fp,"%d",&a[i]);
i++;
}
fclose(fp);
printf("从data.txt读取的整数如下:\n");
for(i=0;i<8;i++){ //打印读取到的8个整数
printf("%d ",a[i]) ;
}
printf("\n");
int num;
printf("请获入要插入的数:");
scanf("%d",&num); //获取要插入的数
// printf("num=%d\n",num);
fp=fopen("f:\\data.txt","w");
int insert=0;
for(i=0;i<8;i++){
if(a[0]>a[7]){ //降序
if(a[i]>num){ //如果数组当前的数比num大,则写入数组的数 到文件
fprintf(fp,"%d ",a[i]);
}else{
if(insert==0){ //如果数组当前的数比num小或等于,并且num没有插入到文件 ,则写入num到文件
fprintf(fp,"%d ",num);
insert=1; //标志num已经写入文件
i--; //因为此次的num还没有操作完,所以重新再来一次,这里--往前移动一个位置,for循环的++再往后移动一个位置,则是重新操作这个位置的数一次
}else{ //如果当前的数比num小,并且num已经写入文件,则将数组当前的数写入文件
fprintf(fp,"%d ",a[i]);
}
}
}
if(a[0]<a[7]){ //升序
if(a[i]<num){ //如果当前数组的数比num小,则写入当前数组的数到文件
fprintf(fp,"%d ",a[i]);
}else{
if(insert==0){ //如果当前的数比num大或等于,并且num没有写入,则写入num到文件
fprintf(fp,"%d ",num);
//printf(" 插入num ");
insert=1; //num写入标志置1,表示num已经写入
i--; //重新操作当前位置的数组的数
}else{ //如果当前的数比num大或等于,并且num已经写入,则写入当然数组的数到文件
// printf(" 插入%d ",a[i]);
fprintf(fp,"%d ",a[i]);
}
}
}
}
fclose(fp);
int b[9];
i=0;
fp=fopen("f:\\data.txt","r");
while(i<9){ //重新读取文件的数到数组
fscanf(fp,"%d",&b[i]);
i++;
}
fclose(fp);
printf("新的data.txt数据如下:\n");
for(i=0;i<9;i++){ //打印新的文件的数
printf("%d ",b[i]) ;
}
printf("\n");
fclose(fp);
return 0;
}