用C ++读取文本文件并将值解析为向量

时间:2014-08-05 14:58:38

标签: c++ string vector

我有一个包含这样的值的文本文件:

John Doe 25 28 35 50 
Jane Doe 30 10 31 76 89 
John Roe 12 34 54

所以,我用以下程序读取文件:

vector<string> lines()
{
  vector<string> lines; 
  string line;

  ifstream myfile("textfile.txt");

  if (myfile.is_open())
  {
    while (getline(myfile, line))
     {
        lines.push_back(line);
     }
    myfile.close();
  }
  else 
  {
    cout << "Unable to open file";
  }

  return lines;
} 

因为我能够逐行阅读内容......到目前为止一切顺利。

然后,我正在迭代试图读取名称和数值的lines()

for (auto line : lines()) {
    string buf; // Have a buffer string
    stringstream ss(line); // Insert the string into a stream
    vector<string> tokens; 
    while (ss >> buf){
        tokens.push_back(buf);
    }
    string name = tokens[0] + " " + tokens[1];

    vector<string> names; // names holder vector
    names.push_back(name);

    vector<string> numbers;
    for (auto token : tokens){
        // pseudo code
        // if token is not a name then add to the numbers vector

    }
    // do something else

 }

2 个答案:

答案 0 :(得分:0)

我终于想出了如何做到这一点。我会迭代令牌并检查它是否是一个数字,例如

for (auto token : tokens){

        // if token is an Int32 then add to the number vector
        if (isInt32(token)){
            numbers.push_back(atoi(token.c_str()));
        }
    }

注意: isInt32是一个小函数,用于检查regex [0-9]是否与字符串输入匹配

答案 1 :(得分:0)

我真的没有在这里看到一个问题。但是你应该将你的名字向量移到该循环之外,否则它将始终只容纳一个元素。前两个代币总是全名吗?中间的首字母怎么样?我真的很喜欢这种事情(解析),我希望你回来一个问题。