使用令牌解析字符串并分配给变量

时间:2014-02-22 21:22:56

标签: c++ parsing

这是我的循环

while(getline(iss,token,','))
     cout<<token<<endl;

有问题的字符串是:

  

john doe,新人,电子邮件@mail.com

运行while leave输出:

john doe
freshman
email@email.com

我的目标是将每段解析后的字符串分配给变量。 例如:

name = token;
cout<<"name: "<<name<<endl:

会产生

name: John doe

然后我会重复其他2件。问题是我无法想象将令牌分配给姓名,年份和电子邮件而不会在每次通过循环时覆盖它。

 90   string comma;
 91   string line;
 92   string token;
 93   ifstream myfile("student.dat");
 94   string name,email="";
 95   string status="";
 96   int id,i;
 97   if (myfile.is_open()){
 98     while ( getline (myfile,line) ) {
 99         //parse line
100         string myText(line);
101         cout<<line<<endl;
102         istringstream iss(myText);
103         if (!(iss>>id)) id=0;
104         i = 0;
105         while(getline(iss,token,','))
106         {
107             cout<<token<<endl;
108            
109            
110                 
111                
112            
113
114            
115         }
116         Student newStudent(id,line,"","");
117         Student::studentList.insert(std::pair<int,Student>(id,newStudent));

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

std::string name, year, email;

if (std::getline(iss, name, ',') &&
    std::getline(iss, year, ',') &&
    std::getline(iss, email))
{
     newStudent = Student(id, name, year, email);
}

分别将字符串的部分提取到各个变量中,然后将它们发送到构造函数。