我第四次访问本网站。只有来这里,因为我实际上已经回答了我的问题。我有一个任务将不同的文件(文本文件)组合在一起。这些文件包括姓名/成绩,我喜欢其中的12个。基本上我需要将所有这些组合成一个文件,其中“Name”为“Grade1”,“Grade2”等... 我已经设法合并了一对,但我无法解决如何找到再次使用哪些单词(因为它们出现在所有12个文件中,所以重复多次相同的名称)和 如果有人能指出我正确的方向,我将不胜感激。谢谢!顺便说一句,这是我的代码:
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
ofstream myfile;
myfile.open ("example.txt");
std::ifstream file1( "Nfiles/f1.txt" ) ;
std::ifstream file2( "Nfiles/f2.txt" ) ;
std::ifstream file3( "Nfiles/f3.txt" ) ;
std::ofstream combined_file( "combined_file.txt" ) ;
combined_file << file1.rdbuf() << file2.rdbuf() << file3.rdbuf() ;
myfile.close();
return 0;
}
PS:通过快速搜索获得了fstream功能。直到现在才知道他们。
答案 0 :(得分:0)
我将举例说明你有两个只有名字的文件,对于更具体的东西,你必须看到输入文件的结构。
#include <vector>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
int main(int argv,char** argc)
{
if(argv<3)
{
std::cout << "Wrong input parameters" << std::endl;
return -1;
}
//read two files
std::fstream input1;
std::fstream input2;
input1.open(argc[1]);
input2.open(argc[2]);
if((!input1)||(!input2))
{
std::cout << "Cannot open one of the files" << std::endl;
}
std::istream_iterator<std::string> in1(input1);
std::istream_iterator<std::string> in2(input2);
std::istream_iterator<std::string> eof1;
std::istream_iterator<std::string> eof2;
std::vector<std::string> vector1(in1,eof1);
std::vector<std::string> vector2(in2,eof2);
std::vector<std::string> names;
std::copy(vector1.begin(),vector1.end(),back_inserter(names));
std::copy(vector2.begin(),vector2.end(),back_inserter(names));
//std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout," "));
std::sort(names.begin(),names.end());
auto it=std::unique(names.begin(),names.end());
names.erase(it);
std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout," "));
};
假设你的文件1:
Paul
John
Nick
和你的第二个文件2:
Paul
Mary
Simon
以上代码将打印:John Mary Nick Paul Simon
它不会打印Paul
两次