对于作业,我需要编写以字符串作为输入的代码,并计算该字符串中使用最多的单词。
我们需要使用名为" WordCount"的结构的二进制搜索树来实现这一点。包含一个字符数组以及该单词出现次数的计数。
这就是结构的定义方式。
struct wordcount {
char word[80];
int count;
};
typedef struct wordcount WordCount;
二进制搜索树必须有一种创建节点的方法,这就是代码:
BSTnode* createNode(void* item) {
BSTnode* newNode = (BSTnode*) malloc(sizeof(BSTnode));
newNode->item = item;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
当我在二进制搜索树中存储WordCount结构并尝试访问该项目,然后访问该单词时,我收到了分段错误。
如果我只是尝试访问树的项目,我会得到char字数组。这没有意义,因为我存储了wordCount结构,所以我应该两次取消引用它。
int main(int argc, char* argv[]) {
if (argc >= 1) {
WordCount* firstWord = (WordCount*) malloc(sizeof(WordCount));
strcpy(firstWord->word,argv[1]);
firstWord->count = 0;
BSTnode* BST = createNode(firstWord);
printf("%s", BST->item); // should be BST->item->word...but this does not work and says that it cannot find "word" which is apart of
}
/*int i;
char string[80];
for(i = 1; i < argc; i++) {
sscanf(argv[i], "%s", string);
//printf("%s ", string);
//insert(main, argv[i], wordCountCompare);
}*/
}
非常感谢任何帮助。如果我的解释完全模糊或不完整,或者我完全忽略了某些内容,请告诉我。
我还想澄清一下,printf语句只是用于调试,只是它们不会成为实际程序的一部分......但是这一点仍然存在。
BSTnode的定义:
struct bstnode {
void *item;
struct bstnode *left;
struct bstnode *right;
};
typedef struct bstnode BSTnode;
答案 0 :(得分:1)
您的项应为wordcount类型。
struct bstnode {
wordcount *item;
struct bstnode *left;
struct bstnode *right;
};
typedef struct bstnode BSTnode;
您不能解除引用void指针(导致编译错误)
答案 1 :(得分:0)
您可能会遇到这些错误,因为您尝试取消引用指向NULL的指针。了解如何使用调试器!提示:在main中断并通过函数逐步查看分段错误发生的位置
答案 2 :(得分:0)
printf("%s", BST->item);
Printf&#34;%s&#34;期望一个字符串,item
是一个结构。尝试:
printf("%s" BST->item->word);