Словарь сделан с C, но вводит в заблуждение поиск - PullRequest
0 голосов
/ 28 марта 2020

Когда я создавал словарь, используя C, он показал мне значение слова, которого нет в самом словаре. Я проверил функцию на проверку равенства двух строк и ее работоспособность, но когда я реализую эту функцию в функции поиска по словарю, где она ищет слово, я вижу значение слова, которое оно не работает, как я и предполагал делать. Я не ищу хорошую производительность, я только пересматривал свои основы в функции и простых булевых функциях. Вот код:

    struct Entry
{
    char word[50];
    char defination[500];
};

bool isEqualString(const char str1[], const char str2[])
{
    bool flag = true;
    int i;
    for(i = 0; str1[i] != '\0'; i++)
        if (str1[i] == str2[i])
        {
            flag = true;
        }
    if ((str1[i] == str2[i]) && str1[i] == '\0')
        flag = true;
    else
        flag = false;

    return flag;
}

int Lookup(const struct Entry dictionary[], const char search[], int entries)
{
    int i;
    bool isEqualString(const char str1[], const char str2[]);

    for (i = 0; i < entries; i++)
    {
        if (isEqualString(search, dictionary[i].word))
        {
            printf("%d and its indice = %d\n", isEqualString(search, dictionary[i].word), i);
            return i;
        }
    }
    return -1;
}

void main()
{
    struct Entry dictionary[2] = 
    { {"Hello", "It means hi."},
      {"Dead", "It means you are dead"} };
    int Lookup(const struct Entry dictionary[], const char search[], int entries);
    int entries = 2, searchEntry;
    char searchWord[10];

    printf("Give us a word to find in the dictionary: \n");
    scanf("%s", searchWord);

    searchEntry = Lookup(dictionary, searchWord, entries);

    if (searchEntry != (-1))
        printf("\n%s %s", dictionary[searchEntry].word, dictionary[searchEntry].defination);
}

1 Ответ

0 голосов
/ 28 марта 2020

лог c в этой функции:

bool isEqualString (const char str1 [], const char str2 [])

не совсем верно.

Предложить:

#include <stdbool.h>
#include <string.h>

bool isEqualString(const char str1[], const char str2[])
{
    bool flag = true;

    for( size_t i = 0; i < (strlen(str1)+1); i++ )
    {
        if ( str1[i] != str2[i] )
        {
            flag = false;
            break;
        }
    }

    return flag;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...