C++ 在C+中读取文本文件+;并将值解析为向量

C++ 在C+中读取文本文件+;并将值解析为向量,c++,string,vector,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

我有一个包含如下值的文本文件:

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;
} 

我终于想出了办法。我迭代标记并检查它是否是一个数字,例如

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是一个小函数,用于检查正则表达式[0-9]是否与字符串输入匹配

我在这里没有看到任何问题。但您应该将名称向量移出该循环,否则它将始终只包含一个元素。前两个标记是否始终是全名?中间的首字母怎么样?我真的很喜欢这种类型的东西(解析),我希望你能带着一个问题回来。

尝试使用OOP。这将简化您的问题。@Nabin想详细说明吗?您想知道如何检查字符串是否为整数,和/或将字符串解析为整数吗?整数的目标向量是否仍将存储在字符串中,或者您希望
向量
?如果他使用对象使用fstream.write进行存储(&obj,sizeof(obj))然后他就可以检索整个对象,这样就很容易了。不是吗?@Nabin No。那不行。你不能假设一个对象的内存布局在不同的编译器之间是相同的,甚至同一个编译器在不同的模式下也是相同的。此外,如果类包含虚拟函数,这将完全中断。面向对象的方法是使用serialize函数或流运算符。
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()));
        }
    }