0
我有一個奇怪的問題,從<algorithm>
標題的set_differences函數。我試圖逐行閱讀兩個文本文件,並將每行放入相應的集合中。出於某種原因,雖然絕大多數肯定存在,但set-difference沒有檢測到兩組之間的差異。當我硬編碼填充兩套它工作得很好。它必須是從文件中讀取字符串的內容,但我無法弄清楚什麼。std :: 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
在讀完文件後,您是否檢查'initialSet'的內容是否正確? – BlackMamba
[mcve]會非常方便,重點在於最小化。這兩個文件中導致此問題的最小數據集是什麼?擺脫I/O代碼並直接使用這些最小數據初始化這些集合。如果你不能最小化程序並且仍然有'set_difference'失敗,那麼它就不能成爲問題,你應該儘量減少不同的方向。 – chris