1

我应该编写一个程序,将两个文件中的数字合并并将所有数字写入第三个文件。该程序从两个不同的文件中获取输入,并将其输出写入第三个文件。每个输入文件都包含一个 int 类型的数字列表,按从小到大的顺序排列。程序运行后,输出文件将包含两个输入文件中的所有数字,按从小到大的顺序排列在一个较长的列表中。我不是 100% 确定我的逻辑是正确的。谢谢您的帮助。

输入文件1:

1 2 3 4 5 6 7 8 9 10

输入文件2:

11 12 13 14 15 16 17 18 19 20

#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

int main()
{
int num1, num2;

ifstream inputFile;
ifstream inputFile2;
inputFile.open ("input1.txt");
inputFile2.open("input2.txt");
ofstream outputFile;
outputFile.open("output.txt");

inputFile >> num1;
inputFile2 >> num2;
while(inputFile.eof() && inputFile2.eof())
{
    if (num1 < num2)
    {
        outputFile << num1;
        inputFile >> num1;
    }
    else
    {       
        outputFile << num2;
        inputFile2 >> num2;
    }
    
}

inputFile.close();
inputFile2.close();
outputFile.close();

return 0;
}
4

3 回答 3

2

如果使用标准库没问题,那么您可以使用merge

int main()
{
    ifstream inputFile("input1.txt");
    ifstream inputFile2("input2.txt");
    ofstream outputFile("output.txt");

    typedef istream_iterator<int> IT;
    typedef ostream_iterator<int> OT;
    std::merge(IT(inputFile), IT(), IT(inputFile2), IT(), OT(outputFile, " "));

    outputFile.flush();
}

另请注意,i/ofstream 构造函数能够在初始化期间打开文件。

于 2012-10-28T07:28:09.340 回答
1
inputFile2.open();

应该

inputFile2.close();
于 2012-10-28T06:12:31.603 回答
1

inputFile2.open();显然是一个错误的类型inputFile2.close();

但恐怕你的逻辑是完全错误的。你还没有理解练习的意义。您应该同时打开输入文件和输出文件并且不应该使用数组来存储和排序数字。如果你做对了,你就不需要数组,也不需要做任何排序。这就是练习的重点。

并在这个论坛上重复至少一百万次已经说过的话。不使用

while (!inputFile.eof())

这是不正确的。使用

while (inputFile >> num)

这是如何进行合并的非常基本的草图。有很多细节要填写。

inFile1 >> num1;
inFile2 >> num2;
while (something or other)
{
  if (num1 < num2)
  {
    outFile << num1;
    inFile1 >> num1;
  }
  else
  {
    outFile << num2;
    inFile2 >> num2;
  }
}

这里有一个讽刺意味,“某事或其他”可能确实涉及使用eof(). 这是inFile.eof()正确使用的一种情况。

顺便说一句,您输入数据的方式不是很好。每个文件都应单独排序,但文件 1 中的所有数字不应小于文件 2 中的所有数字。这不是必需的。

于 2012-10-28T06:15:10.087 回答