我试图创建一个程序,通过解析一些字符串并将它们添加到链接列表中,然后打印出每个字符串的出现开始。链接列表与字符串
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Node Node;
struct Node
{
char* word;
int count;
struct Node *next;
};
Node *head = NULL;
Node *curr = NULL;
Node* listAdd(char* word, bool toEnd) {
Node* tmp = head;
while (tmp) {
if (strcmp(tmp, word) == 0) {
tmp->count++;
return tmp;
}
tmp = tmp->next;
}
printf("allocate memory for node");
Node *ptr = malloc(sizeof(Node));
printf("initialize count to 0");
ptr->count = 0;
printf("allocate memory to hold word");
ptr->word = malloc(strlen(word) + 1);
printf("copy the current word");
strcpy(ptr->word, word);
ptr->next = NULL;
if (toEnd)
{
curr->next = ptr;
curr = ptr;
}
else
{
ptr->next = head;
head = ptr;
}
return ptr;
}
void printList()
{
Node *ptr = head;
while (ptr)
{
printf("\nThe word [%s] has had [%d] occurrences.\n",ptr->word, ptr->count);
ptr = ptr->next;
}
}
char* readWord()
{
static char buffer[100];
scanf("%s", buffer);
printf("listAdd() call");
listAdd(buffer);
return buffer;
}
int main(void)
{
int i = 0;
printf("How many words would you like to type?\n");
scanf("%d", &i);
for (i; i != 0; i--)
{
readWord();
}
printList();
}
电流输出:
How many words would you like to input?
3
hi
bye
yes
How many words would you like to input?
Occurrences: 12086064
任何援助将不胜感激 - 我仍然位于C新手从C#:(
建议你坚持和调试这个自己,而不是转向SO立竿见影。特别是,启动您最喜欢的调试器,逐步执行您的程序,并在每个阶段检查代码是否按预期运行。甚至一些可靠的调试打印语句将会帮助您理解您的程序实际上在做什么。 – kaylum
你不使用函数'searchList'。 'count'没有被初始化.. –
您还需要分配空间来保存'listAdd()'中的实际字符串,例如'ptr-> word = malloc(strlen(word)+ 1);'然后复制字符串'strcpy(ptr-> word,word);' – Cyclonecode