0

file.txt

0 00 19
0 200 699
0 7000 8499
0 85000 89999
0 900000 949999
0 9500000 9999999
1 00 09
1 100 399
1 4000 5499
1 55000 86979
1 869800 998999
1 9990000 9999999
2 00 19
2 200 349
2 35000 39999
2 495 699
2 7000 8399
2 84000 89999
2 900000 949999
2 9500000 9999999
3 00 02
3 030 033
3 0340 0369
3 03700 03999
3 04 19
3 200 699
3 7000 8499
3 85000 89999
3 900000 949999
3 9500000 9999999

最初の値が であるブロックのみが必要であると仮定すると3、次のものだけを 3 つの個別の配列に格納するにはどうすればよいですか。

3 00 02
3 030 033
3 0340 0369
3 03700 03999
3 04 19
3 200 699
3 7000 8499
3 85000 89999
3 900000 949999
3 9500000 9999999  

私はこれまでに持っています:

while (finished != EOF){
    finished = fscanf(fp,"%d %s %s\n", &areaScanned, &pubLow, &pubHigh);
}

それはうまくいきますが、リスト全体を保存します。どうすれば絞り込めますか?基本的に私がする必要があるのは、特定の数値が行1の値、列1と列2の間、次に行2、col1とcol2の間の値、次にrow3、col1とcol2の間の値などの間にあるかどうかを確認することです.

4

1 に答える 1

4

まず、おそらく使用したくないでしょうfscanf。第二に、あなたがおそらくそれを助けることができるならば、あなたはほぼ確実に3つの別々の配列を使いたくないでしょう。可能であれば、次のようなものが必要です。

struct whatever { 
    int a, b, c;

    friend std::istream &operator>>(std::istream &is, whatever &w) { 
        return is >> w.a >> w.b >> w.c;
    }
};

std::vector<whatever> w;

std:copy_if(std::istream_iterator<whatever>(infile),
            std::istream_iterator<whatever>(),
            std::back_inserter(w),
            [](whatever const &w) { return w.a == 3; } );
于 2013-02-03T22:44:06.230 に答える