下面这几行代码的目的是将输入文本文件中的每个单词(单词用换行符分隔)放到一个字符串向量中,然后将每个单词翻过来,看看这个翻出来的单词是否包含在输入文件中的单词列表。
我相信我的二进制搜索功能和 wordTurn 功能工作正常。我对我的代码做了几个简单的测试,我发现使用 while(!myFile.eof()) 循环两次可能是我的代码不起作用的原因。通过不工作,我的意思是我将输出文件(“pairs.txt”)作为一个空文档(它应该是成对的单词列表)。
也就是说,当我在第二个 while(!myFile.eof()) 循环体中放入一些简单的打印代码时,它没有被打印出来,我由此得出结论,这个循环没有到达。这更有可能,因为它是在我注释掉第一个 while(!myFile.eof()) 循环时打印的。我最初将第一个 while 循环放在 else 主体上,但这没有任何区别。
你认为是什么问题?我尝试将这两个循环体组合到第二个循环中,它在输出文件中产生了一些东西,但这不是这段代码应该做的,这在逻辑上是不正确的。
任何建议将不胜感激。
int main(int argc, char* argv[]) {
vector<string> words;
ifstream myFile(argv[1]);
ofstream outputFile("pairs.txt");
string vocab;
string s;
int count;
while(!myFile.eof()) { //first while(!myFile.eof()) loop
getline(myFile, s);
words.push_back(s);
}
if(argc != 2) {
cout << "Usage: provide the name of one input file after the dictlookupHN executable file." << endl;
return (1);
}
else {
if(!myFile.is_open()) {
cerr << "Error: unable to open file " << argv[1] << endl;
return (1);
}
else {
while(!myFile.eof()) { //second while(!myFile.eof()) loop
getline(myFile, vocab);
string turnedWord = wordTurn(vocab);
if(binsearch(words, turnedWord) != "") {
outputFile << vocab << ":" << turnedWord << endl;
count++;
}
}
}
}
myFile.close();
outputFile.close();
return 0;
}