1

2 つのファイルの数値を結合し、すべての数値を 3 番目のファイルに書き込むプログラムを作成することになっています。プログラムは 2 つの異なるファイルから入力を取得し、その出力を 3 番目のファイルに書き込みます。各入力ファイルには、最小から最大の順にソートされた int 型の数値のリストが含まれています。プログラムの実行後、出力ファイルには、2 つの入力ファイルのすべての数値が、最小から最大の順に並べ替えられた 1 つの長いリストに含まれます。私の論理が正しいと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();

しかし、あなたの論理は完全に間違っていると思います。あなたは演習の要点を理解していません。入力ファイルと出力ファイルの両方を同時に開くことが想定されており配列を使用して数値を保存およびソートすることは想定されていません。これを正しく行うと、配列は必要なくなり、並べ替えもまったく必要なくなります。それが練習のポイントです。

そして、このフォーラムですでに少なくとも 100 万回言われていることを繰り返します。使用禁止

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 つの機会です。

ところで、入力データはあまり良くありません。各ファイルは個別にソートする必要がありますが、file1 のすべての数字が file2 のすべての数字よりも少なくなってはいけません。それは必須ではありません。

于 2012-10-28T06:15:10.087 に答える