我有一个文本文件,如下面的read.txt:
1.0 2.0 3.0 4.0
2.0 3.0 4.0 6
5.0 7 1.0 5.0
calc.cpp:
void main()
{
FILE *fp;
fp=fopen("read.txt","r");
double *read_feature = new double*[3];
for(i = 0; i<3; i++)
read_feature[i] = new double[3];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
fscanf(fp,"%lf",&read_feature[i][j]);
}
}
}
我想计算文本文件中的所有数字(read.txt)。读取文本文件由浮点数和整数组成。上述文件的答案是12。
如何动态使用c ++计算文件中的浮点数?这意味着不给出i和j的值。我需要程序会自动计算i和j的总数。
答案 0 :(得分:6)
你需要构建数组吗?
或者只计算花车的数量?
int main()
{
std::ifstream file("read.txt");
std::cout << std::distance(std::istream_iterator<double>(file),
std::istream_iterator<double>());
}
答案 1 :(得分:2)
如果您对计算文件中的元素数(本例中的浮点数)感兴趣,可以将文件读入std::ifstream
,然后使用std::istream_iterator
获取迭代器第一个和相当于一个过去的元素。使用这些std::distance
逐步执行元素并返回步骤数。这是一个有效的例子:
#include <iostream>
#include <iterator>
#include <istream>
#include <fstream>
template <typename T>
int count_elements (std::istream &is)
{
std::istream_iterator<T> start(is), end;
return std::distance(start, end);
}
int main()
{
std::ifstream is("read.txt");
std::cout << "Number of numbers " << count_elements<double>(is) << std::endl;
}
注意:我在这里省略了错误检查,我将其留给用户。另请注意,如果有一个元素无法解释为浮点数,则算法将停止计数。所以你得到的非零结果对应于非法的元素数量。
答案 2 :(得分:0)
假设文件只包含浮动数字,为了找到浮动数字的总数,您可以计算文件中的点数:
FILE *fp;
fp=fopen("read.txt","r");
char c;
int nFloat=0;
while(!feof(fp))
{
fscanf(fp,"%c",&c);
if (c=='.') //is a dot from a floating number
nFloat++;
}
答案 3 :(得分:-2)
研究banuj的答案。您可以计算一行中的浮点数和行数
FILE *fp;
fp=fopen("read.txt","r");
char c;
int nFloatrow=0,nfloatcol=0,count=1;
while(!feof(fp))
{
fscanf(fp,"%c",&c);
if (c=='.'&&count==1) //is a dot from a floating number
nFloatrow++;
if (c=='\n') //is a newline
{
nFloatcol++;
count=0;
}
}