嘿。我正在尝试从包含单词列表的文件中将字符串读入数组。这样我可以检查字符串是否是真正的单词,因为它们存在于我的数组中。除了比较之外,我有一切工作。我的二进制搜索甚至通过了有问题的单词。当它比较两个完全相同的单词时,它仍然返回false。我认为这个问题可能与我提取的方式有关,因为string.compare()函数正常工作。这是代码。我会喜欢一些帮助。感谢。
ifstream dictFile;
dictFile.open("dictionary.txt");
if (!dictFile) // testing if file open
{
cout << "Error opening dictionary file" << endl;
}
int index = 0; // dictionary must progress start at line 1
while(!dictFile.eof())
{
getline(dictFile,dictionary[index]);
index++;
}
dictFile.close();
关于我这样做有什么不妥之处吗?
EDIT 这是比较代码
bool database::is_word(string word)
{
int ii;
int comp;
int min = 0;
int max = dictSize;
// this will go into the dictionary and look for the word
// it uses a binary search pattern
while (min<=max)
{
ii = (min+max)/2;
comp = word.compare(dictionary[ii]);
cout <<dictionary[ii];
if (comp==0)
{
cout << word<< " is a word!" << endl;
return 1;
}
else if (comp < 0)
{
max = ii-1;
}
else
{
min = ii+1;
}
}
cout << word << " is NOT a word!" << endl;
return 0;
}
答案 0 :(得分:1)
不再是eof()函数了!你想要:
while( getline(dictFile,dictionary[index]) ) {
index++;
}
(假设dictionary
是明智的,它可能不是),因为eof()不能预测下一次读取是否有效。
在哪里,人们从哪里获取eof()?它就像一种疾病!
答案 1 :(得分:0)
如果我的目标是简洁而不是表现,这就是我整个计划的方式。
// read the dictionary
vector<string> dictionary;
{
ifstream dictionary_file("dictionary.txt");
istream_iterator<string> begin(dictionary_file);
istream_iterator<string> end;
while( begin != end )
dictionary.push_back( *begin++ );
sort( dictionary.begin(), dictionary.end() );
}
// read the input file and test against the dictionary
{
ifstream input_file("input.txt");
istream_iterator<string> begin(input_file);
istream_iterator<string> end;
while( begin != end )
{
string input = *begin++;
vector<string>::iterator it = lower_bound( dictionary.begin(), dictionary.end(), input );
if( it != dictionary.end() && *it == input )
cout << input << " found!" << endl;
else
cout << input << " not found!" << endl;
}
}