std :: set_differences无法使用读取文件

std::set_Differences Not working with read files

本文关键字:文件 读取 set differences std      更新时间:2023-10-16

我从 <algorithm>标头中遇到了set_differences函数的奇怪问题。我试图逐行读取两个文本文件,并将每个线路放入相应的集合中。由于某种原因,设置差异并未检测到两组之间的任何差异,尽管最肯定的是。当我硬码填充两组时,它可以正常工作。从文件中读取的字符串的内容一定是某种内容,但我不知道什么。

#include <stdio.h>     
#include <stdlib.h>    
#include <iostream>
#include <fstream>
#include <set>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <string>
std::set<std::string> listOfFiles(std::string fileName) {
    std::ifstream tempFile;
    tempFile.open(fileName.c_str());
    std::string X;
    std::set<std::string> fileNameSet;
    if (tempFile.is_open()) {
        while (std::getline(tempFile, X)) {
            fileNameSet.insert(X);
        }
    }
    else {
        std::cerr << "Failed to open " + fileName + "n";
        exit(0);
    }
    return fileNameSet;
}
std::set<std::string> setDifferences(std::set<std::string> a, std::set<std::string> b) {
    using namespace std;
    set<string> result;
    set_difference( a.begin(), a.end(), b.begin(), b.end(), inserter(result, result.begin()));
    cout << "Difference" << endl << "-------------" << endl;
    for (set<string>::const_iterator i = result.begin(); i != result.end(); ++i) {
        cout << *i << endl;
    } 
    return result;
}
int main()
{
    std::set<std::string> initialSet = listOfFiles("test1.txt");
    std::set<std::string> afterNGD = listOfFiles("test2.txt");
    std::set<std::string> result, result2;
    std::set<std::string> a, b;
    a.insert("one");
    a.insert("two");
    a.insert("three");
    b.insert("a");
    b.insert("b");
    b.insert("three");
    //Fails: result is empty
    result = setDifferences(initialSet, afterNGD);

    //Pass: result2 constains strings "one" and "two"
    result2 = setDifferences(a,b);
    return 0;
}

我的文本文件包含:test1.txt

.Xil
fileNames.txt
hostlistfile.txt
ipcore_dir
iseconfig
item.prj
item.sch
item.sym
item.syr
item.ucf
item.vhf
item.xdl
item.xst
item_bitgen.xwbt
item_guide.ncd
item_summary.html
pa.fromNcd.tcl
planAhead.ngc2edif.log
planAhead_pid11956.debug
planAhead_pid1272.debug
planAhead_pid16492.debug
planAhead_pid19040.debug
planAhead_pid7804.debug
planAhead_pid9888.debug
planAhead_run_1
planAhead_run_2
sch2HdlBatchFile
SingleItemTest.gise
SingleItemTest.tcl
SingleItemTest.xise
template files
templates
xst
_xmsgs

text2.txt:

.Xil
fileNames.txt
hostlistfile.txt
ipcore_dir
iseconfig
item.bld
item.lso
item.ngc
item.ngd
item.ngr
item.prj
item.sch
item.sym
item.syr
item.ucf
item.vhf
item.xdl
item.xst
item_bitgen.xwbt
item_guide.ncd
item_ngdbuild.xrpt
item_summary.html
item_vhdl.prj
item_xst.xrpt
pa.fromNcd.tcl
planAhead.ngc2edif.log
planAhead_pid11956.debug
planAhead_pid1272.debug
planAhead_pid16492.debug
planAhead_pid19040.debug
planAhead_pid7804.debug
planAhead_pid9888.debug
planAhead_run_1
planAhead_run_2
sch2HdlBatchFile
SingleItemTest.gise
SingleItemTest.tcl
SingleItemTest.xise
template files
templates
xlnx_auto_0_xdb
xst
_ngo
_xmsgs

来自参考:

复制来自排序范围的元素[first1,last1) 找不到在排序范围[first2,last2)到启动范围 在d_first。

从您的示例文件中,text1.txt 中的所有元素都可以在text2.txt中找到,因此输出是预期的。