我只需编写一个函数来计算已经打开的好文本文件中的整数数。
一个。假设有一个文本文件,其中有大量的整数除以空格
湾编写一个名为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;
}
答案 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
返回到达结束迭代器所花费的迭代步数。