【问题标题】:C++ Converting a text file list with numbers and words into an integer 2D arrayC ++将带有数字和单词的文本文件列表转换为整数二维数组
【发布时间】:2015-08-19 10:59:03
【问题描述】:

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

<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 类型。当我尝试将其输入矩阵时,这会导致稍后出现问题。

有人有什么建议吗?

提前致谢!

【问题讨论】:

  • 好吧,可以给出提示,为每一行创建一个字符串,然后从每个字符串中创建一个流。将读取每个流以填充矩阵中的一行。如果尝试从该流中读取一个数字(使用通常的 >>)失败,则必须读取一个可以忽略的“和”,iiuc。然后必须重置流,必须读取其余的“and”,并继续读取 int 直到 eof。

标签: c++ arrays vector int


【解决方案1】:

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

【讨论】:

  • 谢谢大家!我用我的输入文件示例更新了主题。我正在调查你们提到的内容
  • 查看您提供的示例输入后,我的方法似乎不需要太多更改。同样,遍历每一行并确保所有条目都是字母数字的(您可以在 stdlib.h 中使用 isalnum() 来实现这一点)。如果该行是字母数字,则使用 stdlib 的 atof 方法(文档 here)将其转换为浮点数。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多