Функция, которая считает количество целых чисел в текстовом файле? - PullRequest
0 голосов
/ 11 марта 2010

Мне нужно написать только функцию, которая подсчитывает количество целых чисел в уже открытом и хорошем текстовом файле.

а. Предположим, есть текстовый файл с большим количеством целых чисел, разделенных пробелами

б. Напишите функцию под названием analysisFile, которая принимает ранее открытый ifstream файл объекта в качестве параметра и подсчитывает количество целых чисел в файле.

с. Он не должен ничего делать с целыми числами, но он должен рассчитывать точно правильное количество целых чисел в файле и вернуть этот номер вызывающему функция.

д. Также не нужно манипулировать самими файловыми операциями, поэтому необходимо закрыть файл или выполнить любые другие действия, кроме подсчета целых чисел и возвращая их количество.

Спасибо за любую помощь по моей проблеме!

Изменить: Вот что я делаю как функция, делаю далеко, правильно, я не знаю:

int analizeFile (ifstream &inf, const string &fileName) { 
   int count = 1; 
   int num; 
   fin.open(fileName.c_str() ); 
   fin >> num; 
   while (fin.good() ) { 
      fin>> num; 
      count ++; 
   } 
   return count;
} 

Ответы [ 2 ]

2 голосов
/ 11 марта 2010

Вы также можете использовать функциональный подход

// it was previously opened, so you don't need a filename. 
int analyzeFile (istream &inf) { 
   std::istream_iterator<int> b(inf), e;
   return std::distance(b, e);
}

Если итератор не может прочитать целое число, он устанавливает состояние сбоя в потоке и сравнивает его с конечным итератором. distance затем возвращает количество шагов итерации, необходимых для достижения конечного итератора.

2 голосов
/ 11 марта 2010

Комментарии:

int analizeFile (ifstream &inf, const string &fileName) { 

Поскольку число всегда является неотрицательным значением, я бы предпочел использовать size_t, а не int. Nit: Вы можете изменить имя функции на analyzeFile.

int count = 1; 

Проблема начинается здесь: если в вашем файле нет целых чисел, вы возвращаете неверный результат.

 int num; 
   fin.open(fileName.c_str() ); 

Не нужно звонить open. Обычно это вызывается ifstream ctor.

   fin >> num; 
   while (fin.good() ) { 

Опять же, это не обязательно. Вы можете извлечь из потока и протестировать в условии while - то, что используется чаще.

  fin>> num; 
  count ++; 
   } 
   return count;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...