Поиск слова в текстовом файле - C (СИ) (148198)

Узнай цену своей работы

Формулировка задачи:

Почему программа вылетает ? Когда пробую на линуксе, там вообще дамп памяти. Необходимо найти слово в файле, и вывести их количество, сколько раз это слово повторялось.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]){
FILE *mf;
char str[100];
char *estr;
char *istr;
//char *istr1;
char strArray[100];
char buf = "hello";
int count;
 
mf=fopen ("C:/Users/User1/Desktop/1.txt","r");
char sep [10]=" ";
 
estr = fgets (str,sizeof(str),mf);
if (estr == NULL){
 
if ( feof (mf) != 0){
 
}
else{
    printf("\nError read file\n");
}
}
    fclose(mf);
    istr = strtok (str,sep);
    int i=0;
    int cnt = sizeof(strArray)/sizeof(char);
    printf("%d\n", cnt);
    while (istr != NULL)
    {
        istr = strtok (NULL,sep);
        printf("%s\t", istr);
            if (strcmp(istr, buf)==0) 
            {
                count++;
            }
return 0;
}

Решение задачи: «Поиск слова в текстовом файле»

textual
Листинг программы
//gcc 5.4.0
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define DELIM " "
#define WORD "hello"
 
int main(void)
{
    char buf[BUFSIZ];
    
    FILE *f = fopen ("C:/Users/User1/Desktop/1.txt","r");
    
    if ( !f ) {
       fprintf(stderr, "Error open file\n");
       return 1;
    }
 
    if ( !fgets(buf, BUFSIZ, f) ) {
       fprintf(stderr, "Error read file\n");
       return 1;
    }
    fclose(f);
 
    size_t count = 0;
    for (char *ptr=strtok(buf, DELIM); ptr; ptr=strtok(NULL, DELIM))
        if (!strcmp(ptr, WORD)) ++count;
    
    printf("Count %s: %zu\n", WORD, count);
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с I/O и строками
  2. Определяем разделитель (DELIM) и искомое слово (WORD)
  3. Открываем файл на чтение (fopen), проверяем на ошибку (если файл не открылся, выводим сообщение и возвращаем 1)
  4. Читаем файл (fgets), проверяем на ошибку (если не удалось прочитать, выводим сообщение и возвращаем 1)
  5. Закрываем файл (fclose)
  6. Инициализируем переменную count для подсчета найденных вхождений слова
  7. Разбиваем строку на слова (strtok), сравниваем каждое слово с искомым словом (strcmp), если слова совпадают, увеличиваем счетчик count на 1
  8. Выводим количество найденных вхождений слова
  9. Возвращаем 0, если все прошло успешно

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы