-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

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

4 に答える 4

6

アレイを構築する必要がありますか?

それともフロートの数を数えるだけですか?

 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

ファイル内の要素 (この場合は浮動小数点数) の数をカウントすることに関心がある場合は、ファイルを に読み込み、std::ifstreama を使用std::istream_iteratorして最初のイテレータと最後の要素の 1 つ後ろに相当するものを取得できます。これらを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

バヌジからの回答に取り組んでいます。1行のフロート数と行数をカウントできます

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 に答える