C++面试题:把文件中的一组整数排序后输出到另一个文件中。
考点:运用vector容器解决实际问题
出现频率:★★★★
解析:
这个题目牵涉到文件操作以及排序。我们可以使用vector容器来简化文件操作。在读文件的时候用push_back把所有的整数放入一个vector<int>对象中,在写文件时用[]操作符直接把vector<int>对象输出到文件。代码如下:
#include<iostream>
#include<fstream>
#include <vector>
using namespace std;
//对data容器中的所有元素进行冒泡排序
void Order(vector<int>& data)
{
int count = data.size(); //获得vector中的元素个数
for (int i=0 ; i<count ; i++)
{
for (int j=0; j<count-i-1; j++)
{
if (data[j] > data[j+1]) //如果当前元素比下一个元素大,则交换
{ //结果为升序排列
int temp = data[j] ;
data[j] = data[j+1] ;
data[j+1] = temp ;
}
}
}
}
int main( void )
{
vector<int>data;
ifstream in("c:\\data.txt");
if (!in) //打开输出文件失败
{
cout<< "infile error!" << endl;
return 1;
}
int temp;
while (!in.eof())
{
in >> temp; //从文件中读取整数
data.push_back(temp); //把读取的证书放入data容器中
}
in.close();
Order(data); //冒泡排序
ofstream out("c:\\result.txt");
if (!out) //打开输出文件失败
{
cout<<"outfile error!" << endl;
return 1;
}
for (int i = 0 ; i < data.size() ; i++)
out << data[i] << " "; //把data容器中的所有元素输出至文件
out.close();
return 0;
}
程序中的Order函数使用冒泡排序把data容器中的所有元素进行了升序。下面说明主函数的各个步骤:
(1)代码26行,定义了一个空的vector<int>容器
(2)代码27~32行,定义了一个输入文件流,如果打开输入文件(data.txt)失败,则主函数返回。
(3)代码34~38行,把输入文件中(data.txt)的所有整数放入vector容器中。
(4)代码40行,调用Order函数对vector容器中的所有元素进行排序(升序)。
(5)代码41~46行,定义了一个输出文件流,如果打开输出文件(result.txt)失败,则主函数返回。
(6)代码47~48行,把data容器中的所有元素输出至result.txt中
原文:http://genwoxuevc.blog.51cto.com/1852984/504091
考点:文件读写,基本排序方法,容器使用。都是基础的知识。