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

C++ 计算文本文件中整数数的函数?,c++,file-io,C++,File Io,我只需要写一个函数,计算一个已经打开的好文本文件中的整数数 a。假设有一个包含大量整数除以空格的文本文件 b。编写一个名为analyzeFile的函数,该函数接受以前打开的ifstream 文件对象作为参数,并计算文件中的整数数 c。它不需要对整数做任何处理,但必须精确地计算整数 更正文件中的整数数,并将该数返回给调用 功能 d。它也不需要操纵文件操作本身,因此它不需要 需要关闭文件或执行除计算整数以外的任何其他操作 并返回它们的数量 谢谢你对我问题的任何帮助 编辑: 这是我目前所做的函数,对吗

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

a。假设有一个包含大量整数除以空格的文本文件

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

c。它不需要对整数做任何处理,但必须精确地计算整数 更正文件中的整数数,并将该数返回给调用 功能

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;
} 
评论:

int analizeFile (ifstream &inf, const string &fileName) { 
由于计数始终是非负数,因此我更喜欢使用
size\u 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;
} 
评论:

int analizeFile (ifstream &inf, const string &fileName) { 
由于计数始终是非负数,因此我更喜欢使用
size\u 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;
} 

您也可以使用功能性方法

// 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);
}
//它以前已打开,因此不需要文件名。
int分析文件(istream&inf){
std::i流迭代器b(inf),e;
返回标准::距离(b,e);
}

如果迭代器无法读取整数,它将在流上设置失败状态,并将与结束迭代器进行比较<代码>距离然后返回到达最终迭代器所需的迭代步骤数

您也可以使用功能性方法

// 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);
}
//它以前已打开,因此不需要文件名。
int分析文件(istream&inf){
std::i流迭代器b(inf),e;
返回标准::距离(b,e);
}

如果迭代器无法读取整数,它将在流上设置失败状态,并将与结束迭代器进行比较<代码>距离然后返回到达最终迭代器所需的迭代步骤数

向我们展示一些您编写的代码。以及你所面临的任何问题。是的,请公布你到目前为止的情况,以及问题所在。否则,你似乎想让我们为你做功课。这是我目前为止作为一个函数所做的,对吗,我不知道: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;}你能编辑你的问题并添加代码吗?这将有助于将来有此问题的其他人。向我们展示您编写的一些代码。以及你所面临的任何问题。是的,请公布你到目前为止的情况,以及问题所在。否则,你似乎想让我们为你做功课。这是我目前为止作为一个函数所做的,对吗,我不知道: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;}你能编辑你的问题并添加代码吗?这将有助于将来有这个问题的其他人。+1感谢你花时间和精力进行教育,而不是仅仅发布一个解决方案。这篇文章是否对OP进行了教育,这当然是有争议的。在老年退休金计划“课程”的这一点上,我相信一个清晰、简单的例子将提供最大的好处。如果OP已经准备好学习有符号与无符号整数类型和构造函数,那么OP的问题就很明显了。看到一段代码片段,对它的具体功能有着先验知识,这是非常有启发性的!更重要的是,
fin.good()
甚至是错误的。给定此文件内容:“21”,则如果他将
count
初始化为
0
,他将认为文件中有
0
个数字(因为如果设置了eof位,
good()
将返回false)。另一方面,如果他将
count
初始化为
1
,并且内容是“21”,那么他会认为有两个数字,因为在阅读21之后,还没有设置eof或失败位。+1用于花费时间和精力进行教育,而不仅仅是发布解决方案。这篇博文是否教育了OP肯定是有争议的。在老年退休金计划“课程”的这一点上,我相信一个清晰、简单的例子将提供最大的好处。如果OP已经准备好学习有符号与无符号整数类型和构造函数,那么OP的问题就很明显了。看到一段代码片段,对它的具体功能有着先验知识,这是非常有启发性的!更重要的是,
fin.good()
甚至是错误的。给定此文件内容:“21”,则如果他将
count
初始化为
0
,他将认为文件中有
0
个数字(因为如果设置了eof位,
good()
将返回false)。在另一边,如果他初始化