计算文本文件中整数数的函数?

时间:2010-03-11 01:03:09

标签: c++ file-io

我只需编写一个函数来计算已经打开的好文本文件中的整数数。

一个。假设有一个文本文件,其中有大量的整数除以空格

湾编写一个名为analyzeFile的函数,它接受先前打开的ifstream file对象作为参数,并计算文件中的整数数。

℃。它不需要对整数做任何事情,但它必须完全计算 正确的文件中的整数数,并将该数字返回给调用 功能

d。它也不需要自己操作文件操作,所以它不需要 需要关闭文件或进行除计算整数之外的任何其他操作 并返回它们的数量。

感谢您对我的问题提供任何帮助!

修改 这就是我作为一个功能所做的事情,它是对的,我不知道:

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 个答案:

答案 0 :(得分:2)

评论:

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

答案 1 :(得分:2)

您也可以使用功能性方法

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

如果迭代器无法读取整数,它将在流上设置失败状态,并将与end迭代器进行比较。然后distance返回到达结束迭代器所花费的迭代步数。