将字符串从文件读入数组

时间:2011-04-26 16:32:16

标签: c++ string file

嘿。我正在尝试从包含单词列表的文件中将字符串读入数组。这样我可以检查字符串是否是真正的单词,因为它们存在于我的数组中。除了比较之外,我有一切工作。我的二进制搜索甚至通过了有问题的单词。当它比较两个完全相同的单词时,它仍然返回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;
}

2 个答案:

答案 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;
  }
}