用于换行的C ++分隔符,用于:

时间:2014-11-22 16:08:29

标签: c++

说我有一个文本文件" Employees.txt"使用员工姓名和身份证。

像这样:

John:d4250
Sarah:s5355
Alan:r4350

如果我有一个非常非常基本的Employee类,它有一个Name和ID的构造函数 我希望从这个文本文件中读取并将它们插入到矢量

我最好使用类似的东西:

void GenericProgram::loadEmployees()
{
 string line;

 ifstream empFile("employees.txt");
 if(empFile.fail())
   {
    cout << "input file opening failed\n" << endl;
    exit(EXIT_FAILURE);
   }

     while (!empFile.eof())
     {
        string empName;
        string empID;

        while (getline(empFile, line, '\n'))
        {
            // this will give me the line on its own

            // now how to delimit again using ':'

            // then do something like
            Employee e(empName, empID)
            employeeVector.push_back(e);


        }
        empFile.close();
    }

}

我很抱歉这是如此基本。大脑失败了。我想知道是否有更好的方法来读取文件以使用流填充对象。

1 个答案:

答案 0 :(得分:0)

只需添加到您的代码

int pos = line.find(":", 0);
if (pos != std::string::npos)
{
   std::string empName(line.begin(), line.begin() + pos);
   std::string empID(line.begin() + pos + 2, line.end());
}

对于多个“:”

std::vector<std::string> str;
std::vector<size_t> positions;
positions.push_back(0);
do
{
   positions.push_back(line.find(":", positions.size() - 1));
}
while(positions[positions.size() - 1] != std::string::npos);
for (int i = 0; i < positions.size(); i+=2)
{
   str.push_back((line.begin() + positions[i], line.begin() + positions[i+1]));
}

但我没有测试过它。