Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2015, 03:40   #1
___Val___
Новичок
Джуниор
 
Регистрация: 07.06.2015
Сообщений: 1
По умолчанию Работа с данными в файле - C

Дорогие форумчане, очень сильно прошу вас помочь мне выполнить задание по работе с фалом по подсчёту среднего количества слов в предложениях текстового файла. Предложения без слов игнорировать. Для того чтобы программа была зачтена мне необходимо выполнить условия, поставленные ниже (они же недочёты) :

5. Вот есть файл на 6Кб, в программе буфер на 4Кб. Т.е. файл будет прочитан в несколько операций fread и каждый раз программа будет видеть только часть файла. Скажем где-то на границе возникает следующая последовательность: пробел, граница буфера, буква слова. В таком случае слово распознано не будет. Обратно, не должно распознаваться слово если идёт последовательность буква, граница, буква. Аналогичная проблема с пустыми предложениями и границей буфера.

4. Пустые предложения (без слов) не должны учитываться при подсчёте количества предложений, см. задание.

3. Слово в начала файла не будет подсчитано.


Код программы:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void Fail() {
  printf("Critical strike.\n");
  exit(EXIT_FAILURE);
}

void getstr(char *str, int n) {
  if (fgets(str, n, stdin) == NULL) Fail();
  while(*str !='\n' && *str !='\0') str++;
  if (*str !='\n') Fail();
  *str='\0';
} 


int wordCounter(char *str, int n) {
  int word = 0;
  for(int i=1;i<n;i++) {
    if ((str[i] == ' ' || str[i] == '\n') && str[i-1]!=' ') word++;
  }
  //word++;
  return word;
}

int lineCounter(char *str, int n) {
  int line= 0;
  for (int i =1; i<n;i++) {
    if ((str[i] == '.' || str[i] =='!' || str[i] == '?') && (str[i-1]!='.' && str[i-1]!= '!' && str[i-1]!='?' && str[i-1] !=' ')) line++;
  }
  return line;
}

int main() {
  char filein[100+1];
  printf("Введите имя файла: \n");
  getstr(filein,100+1);
  FILE *file = fopen(filein,"r");
  if (file == NULL) {
    perror(filein);
    exit(EXIT_FAILURE);
  } else {
    printf("%s can be opened \n", filein);
  }
  size_t n = 32 * 1024,res;
  char buffer[n+1];
  int result = 0;
  int word=0;
  int line=0;
  do {
    res = fread(buffer, sizeof(*buffer),n,file);
    
    word+=wordCounter(buffer, res);
    //printf("%d\n",word);
    line+=lineCounter(buffer, res);
    //printf("%d\n", line);
    
  } while(res==n);
  if (ferror(file)) {
    perror(filein);
    exit(EXIT_FAILURE);
  }
  if (word == 0 || line == 0) Fail();
  result=word/line;
  printf("Среднее кол-во слов в тексте равно %d\n",result);
  if (fclose(file) !=0) perror(filein);
}
Компиляция происходила при помощи терминала ОП Ubuntu

Ещё раз прошу вас помочь в решении этой задачи и заранее благодарю.

Последний раз редактировалось Stilet; 07.06.2015 в 06:49.
___Val___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с данными COM порта Voronar C# (си шарп) 3 23.09.2012 15:52
Работа с данными на R Liagushka Помощь студентам 0 11.03.2012 15:44
Работа с данными PycckuuPC Microsoft Office Excel 2 19.10.2010 22:33
Работа со строковыми данными [Danil] Паскаль, Turbo Pascal, PascalABC.NET 0 11.06.2010 10:27