从其他两个文件中创建一个分类整数的文件

creating a file of sorted integers from two other files

本文关键字:文件 一个 分类 整数 其他 两个 创建      更新时间:2023-10-16
 #include<iostream>
 #include<fstream>
 using namespace std;
 int main()
 {
 fstream file1,file2,file3,file4;
 int num1,num2,num,temp=0,a[20];
 file1.open("source1.txt",ios::in);
 file2.open("source2.txt",ios::in);
 file3.open("sample.txt",ios::out|ios::in|ios::trunc);
 file4.open("target.txt",ios::out|ios::in|ios::trunc);
 if(file1.is_open()&&file2.is_open()&&file3.is_open()&&file4.is_open())
 {
 while(file1)
 {
  file1>>num1;
  file3<<num1<<'n';
 }
 file1.close();
 while(file2)
  {
    file2>>num2;
    file3<<num2<<'n';
  }
  file2.close();
  file3.seekg(0);
  int i=0;
  while(file3)
  {
    file3>>num;
    a[i]=num;
      i++;
  }
  for(int j=0;j<i-1;j++)
  {
    if(a[j]<a[j+1])
    {
      temp=a[j+1];
      a[j+1]=a[j];
      a[j]=temp;
    }
  }
  file3.close();
  for(int j=0;j<i;j++)
  file4<<a[j]<<'n';
  file4.close();
  }
  else
  cerr<<"nError!";
  return 0;
  }

source1和source 2包含必须复制到目标的整数,应分类它们。我无法使用上述代码对它们进行分类。另外,我看到来自source1和source2的最后一个整数被复制了两次。

如果可能的话,通常要使用标准库中内置的算法,因此(例如)进行排序,可以使用std::sort

std::ifstream in1("source1.txt");
std::ifstream in2("source2.txt");
std::vector<int> numbers;
std::copy(std::istream_iterator<int>(in1), {}, std::back_inserter(numbers));
std::copy(std::istream_iterator<int>(in2), {}, std::back_inserter(numbers));
std::sort(numbers.begin(), numbers.end());
std::ofstream out("target.txt");
std::copy(numbers.begin(), numbers.end(), std::ostream_iterator<int>(out, "n"));

如果每个输入文件中的数字进行排序,因此您只需要合并两个排序的流,就可以使用std::merge

std::ifstream in1("source1.txt");
std::ifstream in2("source2.txt");
std::ofstream out("target.txt");
std::merge(std::istream_iterator<int>(in1), {},
           std::istream_iterator<int>(in2), {},
           std::ostream_iterator<int>(out, "n"));

您可以尝试从任何一个文件中交替阅读,具体取决于以前的数字较小:

file1 >> num1;
file2 >> num2;
while(file1 || file2)
{
   if (!file2)
   {
     file3 << num1 << "n";
     file1 >> num1;
   }
   else if (!file1)
   {
     file3 << num2 << "n";
     file2 >> num2;
   }
   else if (num1 < num2)
   {
     file3 << num1 << "n";
     file1 >> num1;
   }
   else
   {
     file3 << num2 << "n";
     file2 >> num2;
   }
}