如何计算文本文件中的所有数字?

时间:2013-02-15 07:18:15

标签: c++ c

我有一个文本文件,如下面的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的总数。

4 个答案:

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