Как найти найденное слово в словаре? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать словарь, в котором хранятся слова и их определения.

До сих пор я делал базовые c вещи, такие как создание структур и пустую структуру словаря:

#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, которая ищет некоторое заданное слово , это выглядит следующим образом:

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;

}

Итак 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;

}

Даже если в моем пустом словарь Я сделал каждое слово «привет», в консоли вывод программы: Слово «привет» не найдено в словаре. Где может быть возможная проблема?

1 Ответ

0 голосов
/ 21 апреля 2020

Это ваша проблема:

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

Если вы хотите сравнить строку, вы должны использовать strcmp:

if(strcmp(dict->arrayOfEntries[i]->wordInDictionary, word) != 0){
           foundWord = NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...