Подсчитать количество слов в файле - C (СИ) (74767)

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

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

Добрый день. Подскажите пожалуйста, как лучше посчитать количество слов в файле? Вот я сделал, однако он цифры тоже считает за слова. Как сделать так, что бы цифры не считались за слова?
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);
   }
Вообще, я думал что сейчас цифры не должно считать как слова, ибо 40 это кд нуля. Однако нет. Всё равно считает цифры как слово

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

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;
}

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

Вывод:

  1. Объявлены переменные:
    • iChr - счётчик символов
    • iCnt - счётчик слов
    • bPrev - предыдущий символ был буквой
    • bNext - следующий символ является буквой
    • pIn - указатель на файл
  2. Проверка, открылся ли файл
  3. Если файл не открылся, выводится сообщение об ошибке и возвращается 0
  4. Входящие данные считываются в цикле while
    • iChr считывается как символ из файла с помощью fgetc
    • bNext определяется, является ли текущий символ буквой с помощью isalpha
    • Если текущий символ является буквой, bNext становится true
    • Если предыдущий символ был буквой и текущий символ не является буквой, увеличивается счётчик слов iCnt
    • После достижения конца файла, выводится количество слов и счётчик слов сбрасывается в 0
  5. Файл закрывается с помощью fclose
  6. Выводится количество слов в файле с помощью printf
  7. Возвращается 0, заканчивая выполнение программы

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


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

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

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