C ++将带有数字和单词的文本文件列表转换为整数2D数组

时间:2015-06-04 17:34:21

标签: c++ arrays vector int

我有一个基本的文本文件,每行有一个条目,大多数条目都是数字,但是有几行单词和(均匀间隔)。以下是和之间的一个这样的间距的示例:

<event>
4
0
0.1005960E+03
0.2722592E+03
0.7546771E-02
0.1099994E+00
21
-1
0
0
501
502
0.00000000000E+00
0.00000000000E+00
0.17700026409E+03
0.17700026409E+03
0.00000000000E+00
0.
-1.
21
-1
0
0
502
503
0.00000000000E+00
0.00000000000E+00
-0.45779372796E+03
0.45779372796E+03
0.00000000000E+00
0.
1.
6
1
1
2
501
0
-0.13244216743E+03
-0.16326397666E+03
-0.47746002227E+02
0.27641406353E+03
0.17300000000E+03
0.
-1.
-6
1
1
2
0
503
0.13244216743E+03
0.16326397666E+03
-0.23304746164E+03
0.35837992852E+03
0.17300000000E+03
0.
1.
</event>

我需要做的是创建一个数值矩阵(仅使用数值),其中每列保存每个单独的实例之间的所有数据值。

这是我到目前为止所做的:

using namespace std;

int main()
{
    vector <string> data; 
    string str;

  ifstream fin("final_small.txt"); 
  while (fin >> str) 
  {                  
    data.push_back(str);
  }
  fin.close(); // Close the file.

int N = data.size();

  int matrix[13][19];

  for (int i = 0; i < 13; i++) {
      for (int j = 0; j < 19; j++) { 

  matrix[i][j] = data[i];

}  
}
}

显然,这是一项正在进行中的巨大工作。首先,我将文本文件读入一个向量,因为单词而不能是int类型。当我尝试将其输入矩阵时,这会导致问题。

有人有任何建议吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

在C ++ 11中,使用std :: stoi将字符串转换为int。请注意,如果无法执行转换,std :: stoi将抛出std :: invalid_argument类型的异常。

答案 1 :(得分:1)

你能提供一些示例输入吗?你可以做的是遍历每一行,只转换数字字符。您可以使用stdlib函数isdigit()来查看atoi()。然后,您可以使用allowedBounds进行数值转换。希望这有帮助!