Подсчёт слов разной длины из файла - C (СИ)
Формулировка задачи:
Здравствуйте, у меня такой вопрос: подсчитать слова разной длины из файла
Решение задачи: «Подсчёт слов разной длины из файла»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
size_t count_if(FILE* _in, int (*pfn)(int)){
int p, c, isc = (_in == stdin);
size_t n = 0;
p = '\0';
do {
c = fgetc(_in);
if((! isalpha(p) && p != '-') && (isalpha(c) || c == '-'))
++n;
else if(c == '\n' && isc)
break;
p = c;
} while(c != EOF);
return n;
}
int main(void) {
size_t n;
FILE* fp = fopen("config.ini", "r");
if(fp != NULL){
n = count_if(fp, isalpha);
fclose(fp);
printf("count words: %u\n", n);
}
/*
с консоли
n = count_if(stdin, isalpha);
printf("count words: %u\n", n);
*/
getchar();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Подсчитывается количество слов в файле с помощью функции count_if, которая принимает два аргумента: файловый указатель и функцию обратного вызова.
- В функции main открывается файл
config.iniс помощью функции fopen. - Если файл успешно открыт, то вызывается функция count_if, передавая в нее файловый указатель и функцию обратного вызова isalpha, которая проверяет является ли символ буквой.
- Результат подсчета слов сохраняется в переменной n.
- Файл закрывается с помощью функции fclose.
- Выводится результат подсчета слов на экран с помощью функции printf.
- Если файл
config.iniне удалось открыть, то выводится сообщение об ошибке и программа завершается. - Комментарии в коде отформатированы с отступами, чтобы они не мешали чтению кода.