读取文件".txt"并将每行的数据分配给循环列表中的新节点C++



我正在使用C++进行一个项目,有人要求我读取一个txt文件并将数据分配给一个节点。文本文件为:

Yani,1993年19日,12345

奥斯卡,1994年20日,56789

我有结构列表:

struct List{
    string name;
    int age;
    int birth;
    int id;
    List *next;
    List *prev;
}

我的问题是,如何将文本文件中的数据分配给节点,在这种情况下是两个节点,但如果有更多的行,就必须创建更多的新节点?

我正在使用的部分代码:

#include <fstream>
struct List{
...
}
//Here I create the first Node and:
aux=head;
ifstream file ("file.txt");
file >> aux->name >> aux->age >> aux->birth >> aux-> id;

如果文本文件中没有逗号,则可以很好地工作,但逗号会在任何地方出错。

此外,总结如下:)如果文本文件具有:

Danny Watson,1980年23日,58953

节点的名称必须是Danny Watson,而不仅仅是Danny:)

我希望你能帮助我!我会非常感激的。

(对不起,我的英语不太好:()

问题是输入运算符>>读取一个空白分隔的"单词"。这意味着诸如"Danny Watson"之类的输入将被读取为两个单独的字。

相反,我建议您使用std::getline将整行读取为标准string,然后再次使用std::getlinestd::istringstream来获得逗号分隔的值。如果需要,记得去掉前导空格(以及可能的尾随空格)。

类似这样的东西:

std::vector<List> myList;
std::string line;
while (std::getline(file, line))
{
    std::istringstream iss(line);
    List myEntry;
    // Read a comma-separated entry from the temporary input stream
    std::getline(iss, myEntry.name, ',');
    std::string temp;
    std::getline(iss, temp, ',');
    myEntry.age = std::stoi(temp);
    std::getline(iss, temp, ',');
    myEntry.birth = std::stoi(temp);
    std::getline(iss, temp, ',');
    myEntry.id = std::stoi(temp);
    myList.push_back(myEntry);
}

相关内容

  • 没有找到相关文章

最新更新