从c转换为c ++时归档错误

时间:2015-12-09 20:08:33

标签: c++ c file-handling

我遇到的问题是我在c中编写了一个用于归档程序的代码,当我在c ++中编写相同的代码时,它无法正常工作。请帮助我找出我在用c ++编写代码时犯的错误。

C代码:

FILE* dict = fopen("small.txt", "r");
char word[MAX_LINE];
Node* root = newNode(); // pointer to main root of Trie
Node* temp;
while (fgets(word, MAX_LINE, dict) != NULL) {
      temp = root;
    buildTrie(temp, word);
}
fclose(dict);

C ++代码:

ifstream infile;
char word[MAX_LINE];
Node* root = newNode(); // pointer to main root of Trie
Node* temp;

infile.open("small.txt");
while(infile)
{
  for(int i =0;i<MAX_LINE;i++)
  {
      infile>>word[i];
      temp = root;
    buildTrie(temp, word);

  }
}
infile.close();

2 个答案:

答案 0 :(得分:1)

如果我在C ++中编写这样的代码,我可能会写更多这样的代码:

std::string word;

while (std::getline(infile, word))
    buildTrie(temp, word);

老实说,我怀疑我编写的代码完全是这样的 - 我可能会将trie包装成一个类,所以代码看起来更像:

Trie t;
std::string word;

while std::getline(infile, word))
    t.add(word);

答案 1 :(得分:1)

如果你想继续使用char数组和c-strings,请使用istream::getline()来读取你的c程序:

infile.open("small.txt");
while(infile.getline(word, MAX_LINE) )
{
    temp = root;
    buildTrie(temp, word);
}
infile.close();

小心循环读取操作。

现在,根据代码的其余部分,您还可以考虑从char[]迁移到string。这有很多优点,更多的是c ++哲学。然后,您可以按照Jerry的建议使用std::getline()作为答案。