-5

我有一个如下 read.txt 的文本文件:

1.0 2.0 3.0 4.0
2.0 3.0 4.0 6
5.0 7 1.0 5.0

计算.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

4 回答 4

6

Do you need to build the array?

Or just count the number of floats?

 int main()
 {
     std::ifstream   file("read.txt");
     std::cout << std::distance(std::istream_iterator<double>(file),
                                std::istream_iterator<double>());
 }
于 2013-02-15T07:38:41.800 回答
2

如果您对计算文件中元素的数量(在这种情况下为浮点数)感兴趣,您可以将文件读入 a std::ifstream,然后使用 astd::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;
}

注意:我在这里省略了错误检查,我把它留给用户。另请注意,如果存在无法解释为浮点数的元素,则算法将停止计数。所以你得到一个非零结果,对应于非法元素的数量。

于 2013-02-15T07:46:46.207 回答
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++;
}
于 2013-02-15T07:23:25.877 回答
-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;
   }
}
于 2013-02-15T07:28:05.770 回答