我遇到的问题是我在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();
答案 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()
作为答案。