在C ++中读取由空格分隔成字符串的字符串

时间:2014-11-17 21:58:47

标签: c++ string file vector text-files

看看我的test.txt是什么样的:

18 19 20
21 22 23
22 23 24
23 24 25
24 25 26
25 26 27
28 29 30
29 30 31

我想在test.txt中读取整数作为字符串,然后创建一个3个整数的向量。 如果这有意义,那么输出是一个看起来像的矢量:

18 19 20, 21 22 23, 22 23 24, 23 24 25, 24 25 26, 25 26 27, 28 29 30, 29 30 31

继承我的代码:

#include "test.txt"
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <vector>

using namespace std;
struct M
{
  int x;
  int y;
  int z;
};

int main(){
  ifstream file;
  file.open("test.txt");
  string value;
  M XYZ;
  vector<M> Vec;
  if (file){
    while (getline(file, value)){
      XYZ.x = stoi(value);
      if (value == " ")
        XYZ.y = stoi(value);
      if (value == " ")
        XYZ.z = stoi(value);
    }
    Vec.push_back(XYZ);
  }
  else
    cout << "Error openning file." << endl;
  for (int i = 0; i < Vec.size(); i++)
    cout << Vec[i] << endl;
  return 0;
}

我认为我正确使用了getline和stoi,但可能是错的。 逻辑在大多数情况下似乎是正确的。 提前致谢。

1 个答案:

答案 0 :(得分:1)

使用std::stringstream可以减少错误

while (getline(file, value))
{
      std::stringstream ss(value); // must #include <sstream>
      ss >> XYZ.x >> XYZ.y >> XYZ.z;
}

由于@Jonathan Potter的评论,你的代码现在无法运行。