我试图通过使用文本文件中的键/值对来实现AVL树。例如,(0003,09390,Vegas)将是一个这样的键值对,其中0003是键,而09390,Vegas是值。我很困惑如何提取每个单独的项目。我希望0003,09390和Vegas作为结构中的每个单独变量存储。
答案 0 :(得分:0)
我建议使用结构来保存值:
struct Values
{
std::string value; // such as 09390
std::string city; // such as "Vegas"
};
接下来,重载提取运算符:
struct Values
{
std::string value; // such as 09390
std::string city; // such as "Vegas"
friend std::istream& operator>>(std::istream& inp, Values& v);
};
std::istream& operator>>(std::istream& inp, Values& v)
{
inp >> v.value;
// insert code to skip over delimiter.
inp >> v.city;
return inp;
}
您的输入循环可能如下所示:
std::string key;
std::string delimiter;
Values v;
AVL tree;
//...
while (input_file >> key >> delimiter >> v)
{
tree[key] = v;
}
注意:上述输入表达式仅在值不空格或制表符分隔时才有效。
有关从文件读取的更多信息,请搜索StackOverflow:
答案 1 :(得分:0)
最简单的方法可能是将ignore()
与std::getline()
结合使用:
std::string key, code, city;
if (in.ignore(std::numeric_limits<std::streamsize>::max(), '(')
&& std::getline(in, key, ',')
&& std::getline(in, code, ',')
&& std::getline(in, city, ')')) {
// ...
}