2014-10-18 218 views
0

我有一个程序,需要从多行文本文件中输入。每行是学生的信息,并且该信息也用逗号分隔。C++逗号分隔/ getline

我有什么到目前为止

stringstream ss; 
    string data = ""; 
    string student[50] = ""; 
    int i = 0; 
    ifstream inFile; 
    inFile.open("file.txt"); 
     while(getline(inFile, student[i])) 
     { 

      cout << student[i] << endl; 
      i++; 
     } 

注意到每一行,并将其分配到学生的阵列。现在每个学生都有自己的位置。

因此,我也必须将行分解成每个组件(名称,dob,gpa,地址等),这些将在Student类中完成。

我都这样了,学生变量将是一条从文件

stringstream ss(student); 
    while(getline(ss, data, ',')){ 
     cout << data << endl; 
    } 

输出的所有数据单独的字符串。

问题是: 如何更改stringstream将分配给较低代码的什么变量(目标不是输出,我做了测试以查看发生了什么),是否必须创建数据一个数组,然后将该数组的元素分配给变量?

是否有一个话题涉及到分隔符我查过了还是不明白?

感谢

+0

bUmp。如果任何人都可以帮助,我将不胜感激。我不会在接下来的一个小时左右,但我会回到任何可以帮助的人身上。再次感谢 – user3562657 2014-10-18 18:40:47

+0

你的'Student'类是什么样的?如果'getline(ss,data,',')'正确地分解了你的输入,你可以简单地在循环中使用'getline(ss,studentVar.name',')'和其余的'Student'变量。 – IllusiveBrian 2014-10-18 18:49:07

+0

如果你想重新分配'std :: stringstream',你可以这样做:'ss.clear(); ss.str(“新字符串数据”);'。 – Galik 2014-10-18 19:18:33

回答

0

如果要重新分配的std :: stringstream的,你可以这样做:

ss.clear(); 
ss.str("new string data"); 

我会把它首先在你的while()循环。这样你就不需要一个数组来存储所有的行。在阅读时,您可以将每一行处理成学生记录。

int main() 
{ 
    stringstream ss; 
    string data; // no need to initialize 
    string student; // no need for array 

    ifstream inFile; 
    inFile.open("data.txt"); 

    while(getline(inFile, student)) 
    { 
     cout << student << endl; 

     ss.clear(); // clear any errors (from last loop) 
     ss.str(student); // put student data in ss 

     while(getline(ss, data, ',')) 
     { 
      cout << data << endl; 
     } 
    } 
} 
+0

我认为我需要它更容易分开。我会记住你所说的,但现在我正在使用 ''学生* S; S =新生[50]; '' 然后应用我的原始代码直接将它发送到类而不是数组 – user3562657 2014-10-18 21:00:23

+0

@ user3562657为什么使用新的恒定大小的数组? – 2014-10-18 21:01:06

+0

我不知道有另一种方式来做到这一点。该代码中的学生指的是班级Student – user3562657 2014-10-18 21:02:09