Подсчитать количество слов в файле - C (СИ) (74767)
Формулировка задачи:
Добрый день. Подскажите пожалуйста, как лучше посчитать количество слов в файле? Вот я сделал, однако он цифры тоже считает за слова. Как сделать так, что бы цифры не считались за слова?
Вообще, я думал что сейчас цифры не должно считать как слова, ибо 40 это кд нуля. Однако нет. Всё равно считает цифры как слово
int main ()
{
int fSpace = 1, nCount = 0;
char ch[2] = {0};
FILE *fh = fopen("text.txt", "r");
while (! feof(fh))
{
fgets(ch, 2, fh);
if (ch[0] > 41)
fSpace = 0;
else if (0 == fSpace)
{
nCount++;
fSpace = 1;
}
ch[0] = 0;
}
fclose(fh);
printf("%d\n", nCount);
}Решение задачи: «Подсчитать количество слов в файле»
textual
Листинг программы
int main(int argc,char** argv)
{
int iChr = 0;
int iCnt = 0;
bool bPrev = false;
bool bNext = false;
FILE* pIn = fopen("text.txt","rt");
if (!pIn)
{
// Error !
return 0;
}
while ((iChr = fgetc(pIn)) != EOF)
{
bNext = isalpha(iChr) ? true : false;
if (bNext)
{
bPrev = true;
}
if (bPrev && !bNext)
{
bPrev = false;
++iCnt;
}
}
fclose(pIn);
printf("Words total: %d\n",iCnt);
return 0;
}
Объяснение кода листинга программы
Вывод:
- Объявлены переменные:
- iChr - счётчик символов
- iCnt - счётчик слов
- bPrev - предыдущий символ был буквой
- bNext - следующий символ является буквой
- pIn - указатель на файл
- Проверка, открылся ли файл
- Если файл не открылся, выводится сообщение об ошибке и возвращается 0
- Входящие данные считываются в цикле while
- iChr считывается как символ из файла с помощью fgetc
- bNext определяется, является ли текущий символ буквой с помощью isalpha
- Если текущий символ является буквой, bNext становится true
- Если предыдущий символ был буквой и текущий символ не является буквой, увеличивается счётчик слов iCnt
- После достижения конца файла, выводится количество слов и счётчик слов сбрасывается в 0
- Файл закрывается с помощью fclose
- Выводится количество слов в файле с помощью printf
- Возвращается 0, заканчивая выполнение программы