我正在使用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::getline
和std::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);
}