-1

行と区切り文字を受け取り、行を区切り、フロートのベクトルを返す関数を作成しました( splitJavaの関数のように)。これは機能です:

vector<float> extractNumbers(string line, char delimiter) {
    vector<float> a;
    float f;
    string forNow = "";
    for (unsigned int i = 0; i < line.size(); i++) {
        if (line.at(i) == delimeter) {
            f = ::atof(forNow.c_str());
            cout << ::atof(forNow.c_str()) << endl;
            a.push_back(f);
            forNow = "";
        } else {
            forNow += line.at(i);
        }
    }
    f = ::atof(forNow.c_str());
    cout << f << endl;
    a.push_back(f);
    return a;
}

これは私が試しているテキストファイルです:

3 3
1 1 1
1 2 1
1 1 1

私はこの関数を呼び出します:パラメータをvector<float> floatLine = extractNumbers(line, ' '); 印刷しようとすると、テキストと同じように数字を受け取りますが、印刷または受け取ると、最初の行の最初の 3 ではなく 0 が返されます。何かご意見は?forNowf::atof(forNow.c_str())

4

1 に答える 1

2

ファイルを操作するこのような便利な方法について知らない場合に限ります。次のように使用できます。

float a, b;
float c, d, e;
float f, g, h;
fstream file("data.dat", ios::in);
if (file) {
    file >> a >> b;
    file >> c >> d >> e;
    file >> f >> g >> h;
    file.close();
}
于 2015-04-24T15:54:37.840 に答える