首页 > 解决方案 > 如何在字典中找到找到的单词?

问题描述

我正在尝试创建一个存储单词及其定义的字典。

到目前为止,我已经完成了一些基本的事情,比如创建结构和空字典结构:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct{

   char wordInDictionary[32];
   int numberOfMeanings;
   char *wordDefinitions[10];

}Entry; //describes one entry in the dictionary

typedef struct{

   int entries;
   Entry *arrayOfEntries[100];

}Dictionary; //whole dictionary

Dictionary createDictionary(){

   Dictionary emptyDictionary;

   emptyDictionary.entries = 0;

   int i,j;

   for(i=0;i<100;i++){
       emptyDictionary.arrayOfEntries[i] = (Entry*)malloc(sizeof(Entry*));
       emptyDictionary.arrayOfEntries[i]->numberOfMeanings = 0;
       strcpy(emptyDictionary.arrayOfEntries[i]->wordInDictionary, "hello"); //assigning "hello" string because want to test another function in main
       for(j=0;j<10;j++){
           emptyDictionary.arrayOfEntries[i]->wordDefinitions[j] = 
           (char*)malloc(500*sizeof(char*));

           strcpy(emptyDictionary.arrayOfEntries[i]->wordDefinitions[j], "\0");
       }
   }

   return emptyDictionary;

}

然后有一个指向 Entry 类型的函数,它搜索某个给定的word,它看起来如下:

Entry *searchWord(char word[], Dictionary *dict){

   Entry *foundWord;

   int i;

   for(i=0;i<100;i++){
       if(dict->arrayOfEntries[i]->wordInDictionary != word){
           foundWord = NULL;
       }else{
           foundWord = dict->arrayOfEntries[i];
       }
    }

   return foundWord;

}

因此,如果找到 word,则searchWord()应返回指向条目的指针,否则仅返回 NULL 指针。然后我测试了main()中的所有内容,但似乎searchWord()无法正常工作:

int main(){


   Entry* newEntry;

   Dictionary dict = createDictionary();

   char word[] = "hello";
   newEntry = searchWord(word, &dict);

   if (newEntry != NULL) {
       printf("\nWord found: '%s'", word);
   } else {
       printf("\nWord '%s' is not found in the dictionary.", word);
   }

   return 0;

}

即使在我的空字典中,我将每个单词都设为“hello”,但在控制台中程序输出:字典中找不到单词“hello”。可能的问题在哪里?

标签: cpointers

解决方案


这是你的问题:

if(dict->arrayOfEntries[i]->wordInDictionary != word){
           foundWord = NULL;

如果你想比较字符串,你应该使用strcmp

if(strcmp(dict->arrayOfEntries[i]->wordInDictionary, word) != 0){
           foundWord = NULL;

推荐阅读