我需要创建一个读取文件的程序,并将所有单词放在“字典”中,以及它们出现的频率和单词总数。例如,如果文件读取
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的新手。
这是代码 -
答案 0 :(得分:1)
您的代码存在各种问题。例如,在new_entry()
函数中,您将一些新的malloc
内存的地址分配给newentry->string
,但是您要立即将原始字符串的地址分配给它。这会导致内存泄漏(您永远无法返回到malloc
内存)。你正在做strcpy(temp->string, word)
,但他们现在正指着相同的记忆!所以你要把字符串复制到自己身上。
还有其他问题(例如在第80行上使用=
而不是==
)。
答案 1 :(得分:1)
您的代码在add_to_dictionary方法中存在错误。
问题#1:第80行应该更改为if(stringcompare == 0)
(你缺少一个=,这使得它成为一个赋值。在执行后,stringcompare将为0而不是检查它是否为0.赋值的结果是分配的值,0在C)中等于false。
问题#2:你的循环只检查列表中的第一项。你需要删除其他人。
问题#3:第90行和第91行不应该在循环中。第92行的右括号关闭了循环。
问题#4:在new_entry中,您应该{string}的值memcpy
或strcpy
,而不是分配它。分配指针使其指向新地址。您要做的是使当前地址具有与其他字符串相同的内容。为此,您需要遍历旧内存并逐个元素地复制到新内存中。由于你做了很多,有人写了一个函数,将为你做(strcpy
或memcpy
,如前所述)。
我没有多检查其余代码,因此无法保证此列表是详尽无遗的。