Поиск слова в текстовом файле - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O и строками
- Определяем разделитель (DELIM) и искомое слово (WORD)
- Открываем файл на чтение (fopen), проверяем на ошибку (если файл не открылся, выводим сообщение и возвращаем 1)
- Читаем файл (fgets), проверяем на ошибку (если не удалось прочитать, выводим сообщение и возвращаем 1)
- Закрываем файл (fclose)
- Инициализируем переменную count для подсчета найденных вхождений слова
- Разбиваем строку на слова (strtok), сравниваем каждое слово с искомым словом (strcmp), если слова совпадают, увеличиваем счетчик count на 1
- Выводим количество найденных вхождений слова
- Возвращаем 0, если все прошло успешно