文件读写问题 以及整数排序问题

来源:互联网 发布:淘宝怎么买岛国视频 编辑:程序博客网 时间:2024/05/16 06:54


题目:文件中有一组整数,要求排序后输出到另一个文件中。


本文考察两个方向,一个是文件读写操作,另外一个是排序。


关于排序这里就不详细说了,这里采用快速排序的方法。主要讲一下文件(文本文件)的读写操作问题,二进制文件先忽略,在大多面试题里面也不是特别需要:

一c++中文件基本的读写:

 c++中三个文件类:

  fstream  //文件流

  ifstream //读文件流

  ofstream//写文件流

使用它们的时候需要加入各自的头文件。

 ifstream 类似于cin,以本文为例,我们要将input.txt中的整数读入到a[100]中,则可以这样做

ifstream  infile("input.txt");//用构造函数打开input,也可以ifstream infile; infile.open("input.txt");if (infle)     while (infile>>a[i])   //开始我喜欢在这里写成infile>>a[i++];但是会导致i在最后一次无效的时候也++导致统计长度的时候有问题。              i++;


我们可以看到>>符号在执行一次之后,infile就会往前进一个,其中infile是以空格和回车等符号作为间隔的。


写文件的方法

 ofstream outfile("output.txt"); //打开文件   for (int j =0 ;j <num;j++)   {outfile<<a[j]<<" "; //写文件cout <<a[j]<<" "<<j<<endl;}outfile.close();


二 c语言的文件读写


读文件:

   int a[100];   int num=0;   FILE *infile;   infile = fopen("input.txt", "r"); //打开文件   while(!feof(infile))   {     fscanf(infile, "%d", &a[num]);  //读取文件printf("%d \n", a[num]);        num++;      }       fclose(infile);

从里面可以看出面向过程和面向对象的区别,面向过程只是一个个独立的操作,必然fopen ,fscanf已经下面的fprintf,只是定义了一系列的操作对于文件,但是c++的面向对象则是先建立一个ifstream对象,然后所有的操作都是对象内部的操作,可以好好体会体会。

另外注意的是scanf 和fscanf 的最后一个参数都是指针。因为要改变一个数字必须传指针,c语言中。


写文件

 FILE *outFile;   outFile = fopen("output.txt", "w");    for (int j =0 ;j <num;j++)   {       fprintf(outFile,"%d ", a[j]);   }   

不用太多接受fprintf和prinft和类似,注意空格。而且最后一个参数不用指针,不用改变参数内容。


三排序内容,这里不做太多讲述,直接上代码了。

void swap (int &a ,int &b){   int tmp = a;   a = b;   b = tmp;}int partion(int *a, int start ,int end){   int key = a[end];   int lastNumber = end;   while (start < end)   {       while (a[start] <= key && start <end)        start++;   while (a[end] >= key && start <end)         end--;    if (start <end)swap(a[start],a[end]);   }      swap(a[start],a[lastNumber]);      return start;}void quicksort(int *a, int start ,int end){    if (end > start){int position  = partion(a, start ,end);quicksort(a, start, position-1);quicksort(a, position+1, end); }}


4 完整的代码太长,就不放出来了,有人需要可以直接找我要。

原创粉丝点击