【问题标题】:Need help printing the contents of a linked list需要帮助打印链表的内容
【发布时间】:2011-08-15 02:47:01
【问题描述】:

我需要制作一个程序来读取文件,并将所有单词放入“字典”中,以及它们出现的频率和单词总数。例如,如果文件读取

Hello, my name is Robert! My name is cool...

输出将是

hello 1
my 2
name 2
is 2
robert 1
cool 1
The total number of words is 9.

但是,我的函数只打印单词的总数,而不是单词本身。对不起,如果这是一个微不足道的问题,但我是 C 的新手。

这是代码 -

http://pastebin.com/Nb30q965

【问题讨论】:

  • 我不确定这是否与您的问题有关,但您在第 80 行有错误。您应该使用==,而不是=
  • 感谢您指出这一点!但是,是的,问题仍然存在。

标签: c visual-studio-2010 dictionary linked-list printf


【解决方案1】:

您的代码在 add_to_dictionary 方法中有错误。

问题 #1:第 80 行应更改为 if(stringcompare == 0)(您缺少一个 =,这使其成为赋值。执行后 stringcompare 将为 0,而不是检查它是否为 0。赋值的结果是赋值,0 相当于 C) 中的 false。

问题 #2:您的循环仅检查列表中的第一项。您需要删除 else。

问题 #3:第 90 行和第 91 行不应该在循环中。第 92 行的右大括号关闭了循环。

问题#4:在new_entry 中,您应该memcpystrcpy stringone 的值,而不是分配它。分配一个指针使其指向新地址。您要做的是使当前地址具有与其他字符串相同的内容。为此,您需要遍历旧内存并将元素逐个复制到新内存中。由于您经常这样做,因此有人编写了一个可以为您执行此操作的函数(strcpymemcpy 前面提到过)。

我没有过多检查其余代码,因此不能保证此列表是详尽无遗的。

【讨论】:

  • 这成功了!太感谢了。下次我一定会多加注意的。很抱歉占用您和 Oli 的时间。
【解决方案2】:

您的代码存在各种问题。例如,在您的new_entry() 函数中,您将一些新的malloced 内存的地址分配给newentry->string,但随后您立即将原始字符串的地址分配给它。这会导致内存泄漏(您永远无法回到您的malloced 内存)。然后你在做strcpy(temp->string, word),但他们现在指向同一个内存!因此,您将字符串复制到自身中。

还有其他问题(例如在第 80 行错误地使用了= 而不是==)。

【讨论】:

  • 感谢您的帮助,我已经解决了您指出的两个问题。我承认我编程有点慢,但这就是我来寻求帮助的原因。
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2015-01-30
  • 2013-06-17
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多