Поиск слова в файле и добавление в счет - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь найти слово в файле и добавить в переменную счетчика каждый раз, когда оно появляется в тексте.В своем исследовании я не смог найти решение, которое работает.Это кодовый блок, который я использую до сих пор.N - это переменная, использовавшаяся ранее в коде для хранения ввода от пользователя (программа выводит меню с несколькими параметрами, поиск - первый в списке).Я проверил, что файл открыт правильно, но когда я пытаюсь выполнить этот блок, я получаю сообщение об ошибке в буфере! = Nullptr.Кто-нибудь видит проблему?

if (strcmp(n, "S") == 0) {
            char search_word = NULL;
            printf("What word would you like to search for?");
            scanf("%s", search_word);
            while(fgets(str, sizeof(str), fp)){
                if ((strstr(str, search_word)) != NULL)
                    i++;
            }
            printf("Your word appears %d times.", &i);
        }

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете использовать fget вместо scanf

Вам нужно зациклить строку

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

int main() {
    char search_word[100];
    printf("What word would you like to search for?");
    gets(search_word);    // change scanf to gets

    char line[1024];
    int i = 0;
    while (fgets(line, sizeof(line), fp)) {
        char* found = line;

        // After getting a line of characters, loop to find search_word and
        // go to found empty
        while ((found = strstr(found, search_word)) != NULL) {
            i++;
            found++;    // move found to next char
        }
    }

    printf("Your word appears %d times.", i);

    return 0;
}
0 голосов
/ 17 октября 2018

Первое, что я вижу в качестве потенциальной проблемы, это переменная, используемая в scanf, вы пытаетесь поместить массив char в char, поэтому вместо использования char search_word используйте что-то вроде char search_word[32]; таким образомВы можете прочитать массив символов в этом случае до 32 символов.а также другая проблема, с которой вы столкнулись - это использование strstr, функция возвращает первый раз, когда слово найдено в строке, что означает, что если вы используете строку типа "Hello my name is Jeff. is ..." и используете функцию strstr для поискаслово "is", возвращаемое функцией, является указателем на "is Jeff. is ...", поэтому вам нужно использовать для возврата значения, пока вы не получите нулевой возврат, а затем перейти к следующей строке.

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