Использование strstr с 2d массивом - PullRequest
0 голосов
/ 20 марта 2020

Я программирую на C. Я загрузил 2d массив со словами. Это называется словарь [] []. Я пытаюсь использовать strstr, чтобы узнать, сколько слов содержат подстроку «struct». Вот код В моей функции count_matches я пытаюсь перебрать словарь, используя функцию strstr для сравнения. Он всегда возвращает ноль, поэтому я никогда не дохожу до ++ matchcount. Есть идеи почему?

Вот функция. inp - это "struct", словарь - это двумерный массив, а n - количество строк в массиве (т. е. сколько слов в массиве).

int count_matches(char *inp, char dictionary[MAX_LINES][MAX_LEN], int n)
{
int matchcount = 0;
int i;

for (i=0; i < n; ++i)
    {
        if (strstr(dictionary[i], inp) !=NULL)
            {
                ++matchcount;
            }
    }
return matchcount;
}

1 Ответ

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

Я не вижу проблем в данном фрагменте кода.

Подумайте о следующем:

  1. Вы перепутали MAX_LINES и MAX_LEN?

  2. Действительно ли inp равно "struct"?

  3. Вы загрузили в словарь хотя бы одно слово с подстрокой "struct"?

Показать код, где вы Выполните вызов этой функции, если проблема не устранена.

Например, это работает нормально:

int main()
{
    char dictionary[MAX_LINES][MAX_LEN] = {"hello", "hihello", "bye", "Hello"};
    int output = count_matches("hello", dictionary, 4);
    printf("%d", output); // Output is 2 as expected
    return 0;
}

Кстати, вы также можете внести следующие изменения в код:

  1. MAX_WORDS более читабельно, чем MAX_LINES

  2. Вы делаете не обязательно писать != NULL внутри этого условия

...