C ++从包含字符串和双精度的文件中将双值读入2D数组

时间:2016-02-27 22:22:10

标签: c++ arrays string double

我正在通过一个程序,我有一个包含州名的输入文件,每个州有三个单独的税:销售税,财产税和所得税。我试图将税值(读作双变量)读入double类型的数组中。这是我的代码:

function toRx ( eventEmitter ) {
  return Rx.Observable.create(function ( observer ) {
    eventEmitter.subscribe(function listener ( value ) {observer.onNext(value)});
    // Ideally you also manage error and completion, if that makes sense with Angular2
    return function () {
      /* manage end of subscription here */
    };
  };
)
}

这是数据文件:

{{1}}

从这里,程序输出数组,除了每个位置读取-9.25596e + 061。我想知道这是否是因为该程序试图将字符串读入数组。我还想知道是否有办法逐行忽略文件中的字符串,以便只将双值读入数组。

2 个答案:

答案 0 :(得分:0)

您在sed -E 's/^.*([Ss][Cc][-_]?[0-9]{4}).*(\.[a-Z]{3})$/\1\2/' infile循环中读取整行。您以后不需要for。相反,你应该这样做:

fin >> array[i][j]

答案 1 :(得分:0)

这应该做的工作:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {

    double array[5][3];
    string state_name;

    ifstream fin;
    fin.open("test.dat");

    // Read the file row by row
    int row =0;
    while(fin >> state_name >> array[row][0] >> array[row][1] >> array[row][2]) {
       ++row;
    }

    // Print the result
    for(int i = 0; i < 5; i++) {
       for(int j = 0; j < 3; j++) {
           cout << array[i][j] << "\t";
       }
       cout << endl;
     }

     return 0;
 }

如果你允许我进一步思考,你可能更喜欢将每一行推入向量而不是静态数组。否则,如果文件的行数超过5行,则需要重写代码。