【问题标题】:c++ comma delimiting/getlinec++ 逗号分隔/getline
【发布时间】:2014-10-18 18:18:53
【问题描述】:

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

到目前为止我所拥有的是

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

获取每一行并将其分配到学生数组中。现在每个学生都有自己的位置。

因此,我还必须将行拆分为每个组件(姓名、出生日期、gpa、地址等),这将在 Student 类中完成。

我有这个,学生变量将是一行的字符串

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

从文件中单独输出所有数据。

问题是: 如何更改将在较低代码中分配字符串流的变量(目标不是输出,我这样做是为了测试以查看发生了什么),我是否必须将数据设为数组然后分配元素那个数组变成变量?

是否有我看过或不理解的与分隔符有关的主题?

谢谢

【问题讨论】:

  • 凹凸。如果有人可以提供帮助,我将不胜感激。我不会在接下来的一个小时左右上班,但我会回复任何可以提供帮助的人。再次感谢
  • 您的Student 班级是什么样的?如果getline(ss, data, ',') 正确分解了您的输入,您可以简单地在循环中使用getline(ss, studentVar.name ',') 和其余的Student 变量。
  • 如果你想重新分配std::stringstream,你可以这样做:ss.clear(); ss.str("new string data");
  • @Namfuak student 拥有私有的所有数据变量。公众有一个重载的构造函数,传递从 main 获取的字符串。然后应用该代码。我需要它做的是从字符串中取出每个部分(用逗号分隔)并将其分配给相应的变量。每个字符串将采用相同的格式。
  • class Student{ private: string fName; string lName; string gpa; string credHours; public: Student(string data){ stringstream ss(data); while(getline(ss, data, ',')){ cout &lt;&lt; data &lt;&lt; endl; } }

标签: c++ arrays delimiter ifstream


【解决方案1】:

如果你想重新分配 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;
        }
    }
}

【讨论】:

  • 我认为我需要更容易将它们分开。我会记住你所说的,但现在我使用Student *S; S = new Student[50]; ,然后应用我的原始代码将其直接发送到类而不是数组
  • @user3562657 为什么要使用 new 来处理一个固定大小的数组?
  • 我不知道另一种方法。该代码中的学生指的是学生类
  • @user3562657 Student *S[50]; 将初始化一个大小为 50 的常量数组,编译器将处理释放,这意味着您无需记住将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多