Нужна помощь в печати содержимого связанного списка - PullRequest
1 голос
/ 29 апреля 2011

Мне нужно создать программу, которая читает файл и помещает все их слова в «словарь», а также их частоту и общее количество слов. Например, если файл прочитан

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

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Ваш код содержит ошибку в методе add_to_dictionary.

Проблема # 1: Строка 80 должна быть изменена на if(stringcompare == 0) (вы пропускаете символ =, что делает его присваиванием. Stringcompare будет 0 после выполнения вместо проверки, если оно равно 0. Результатом присваивания является присвоенное значение, а 0 соответствует значению false в C).

Проблема № 2: Ваш цикл проверяет только первый элемент в списке. Вы должны удалить остальное.

Проблема № 3: строки 90 и 91 не должны быть в цикле. Закрывающая скобка в строке 92 закрывает цикл.

Проблема № 4: В new_entry вы должны memcpy или strcpy значение stringone, а не присваивать его. Назначение указателя заставляет его указывать на новый адрес. То, что вы хотите сделать, это чтобы текущий адрес имел то же содержимое, что и другая строка. Для этого вам нужно пройти через старую память и копировать элемент за элементом в новую память. Поскольку вы часто это делаете, кто-то написал функцию, которая сделает это за вас (strcpy или memcpy, как было упомянуто ранее).

Я не очень проверял остальную часть кода, поэтому нет гарантий, что этот список является исчерпывающим.

1 голос
/ 29 апреля 2011

Есть много проблем с вашим кодом. Например, в вашей функции new_entry() вы назначаете адрес какой-то недавно malloc редактируемой памяти для newentry->string, но затем вы немедленно назначаете ей адрес исходной строки. Это приводит к утечке памяти (вы никогда не сможете вернуться к своей malloc ed памяти). Вы тогда делаете strcpy(temp->string, word), но они теперь указывают на ту же самую память! Итак, вы копируете строку в себя.

Есть и другие проблемы (например, неправильное использование = вместо == в строке 80).

...