0

次の形式のピクセル座標を含むファイルがあります。

234 324
126 345
264 345

ファイルに座標のペアがいくつあるかわかりません。

vector<Point>それらをファイルに読み込むにはどうすればよいですか?私はC++で読み取り関数を使用する初心者です。

私はこれを試しましたが、うまくいかないようです:

vector<Point> iP, iiP;

ifstream pFile, rFile;
pFile.open("D:\\MATLAB\\WORKSPACE_MATLAB\\pData.txt");
rFile.open("D:\\MATLAB\\WORKSPACE_MATLAB\\rData.txt");

string rBuffer, pBuffer;
Point rPoint, pPoint;

while (getline(pFile, pBuffer))
{
    getline(rFile, rBuffer);

    sscanf(rBuffer.c_str(), "%d %d", rPoint.x, rPoint.y);
    sscanf(pBuffer.c_str(), "%d %d", pPoint.x, pPoint.y);

    iP.push_back(pPoint);
    iiP.push_back(rPoint);
}

奇妙なメモリエラーが発生します。私は何か間違ったことをしていますか?コードを修正して実行できるようにするにはどうすればよいですか?

4

2 に答える 2

6

これを行う1つの方法は、クラスのカスタム入力演算子( operator>>)を定義してから、を使用して要素を読み取ることです。概念を示すサンプルプログラムは次のとおりです。Pointistream_iterator

#include <iostream>
#include <iterator>
#include <vector>

struct Point {
    int x, y;
};

template <typename T>
std::basic_istream<T>& operator>>(std::basic_istream<T>& is, Point& p) {
    return is >> p.x >> p.y;
}

int main() {
    std::vector<Point> points(std::istream_iterator<Point>(std::cin),
            std::istream_iterator<Point>());
    for (std::vector<Point>::const_iterator cur(points.begin()), end(points.end());
            cur != end; ++cur) {
        std::cout << "(" << cur->x << ", " << cur->y << ")\n";
    }
}

このプログラムは、質問で指定した形式の入力をからcin受け取り、ポイントをcout(x、y)形式で出力します。

于 2012-10-07T06:19:29.377 に答える
0

Chris Jester-Youngとenobayramのおかげで、問題を解決することができました。以下にコードを追加しました。

vector<Point> iP, iiP;

ifstream pFile, rFile;
pFile.open("D:\\MATLAB\\WORKSPACE_MATLAB\\pData.txt");
rFile.open("D:\\MATLAB\\WORKSPACE_MATLAB\\rData.txt");
stringstream ss (stringstream::in | stringstream::out);

string rBuffer, pBuffer;


while (getline(pFile, pBuffer))
{
    getline(rFile, rBuffer);

    Point bufferRPoint, bufferPPoint;

    ss << pBuffer;
    ss >> bufferPPoint.x >> bufferPPoint.y;

    ss << rBuffer;
    ss >> bufferRPoint.x >> bufferRPoint.y;

    //sscanf(rBuffer.c_str(), "%i %i", bufferRPoint.x, bufferRPoint.y);
    //sscanf(pBuffer.c_str(), "%i %i", bufferPPoint.x, bufferPPoint.y);

    iP.push_back(bufferPPoint);
    iiP.push_back(bufferRPoint);
}
于 2012-10-07T07:19:44.863 に答える