从文本文件中读取字符串和整型数



好的,事情是这样的。下面是我文件中的输入。

 3332453:Ryan:77 Easy Street
 3324532:Tom:1 Victory Lane
 3326854:Gary:69 Sexual Ave
 3304357:Susan:11 Straight Road
 3343651:Frank:96 Backwards street

我要做的是读入数字,然后是名称,然后是地址,并将它们存储到BST中。在检查了一切之后,我认为我的插入器工作正常。它正确地将Name和Address插入到每个位置,但是key1一直是0或-955472。上述数字都假定为7位数长(电话号码)。下面是我认为我迄今为止最接近的尝试。我不是要求有人给我代码(虽然它会有所帮助),而是向我解释为什么我的实现不工作,以及我如何改进它。谢谢你。

 ifstream dataFile;
dataFile.open ("/Users/revaes12/Desktop/BinarySearch/BinarySearch/phone.dat.rtf");
for (int counter = 0; counter < 5; counter++)
{
        getline(dataFile, tmp,  ':');
        person[counter].key1 = atoi(tmp.c_str());
        getline(dataFile, person[counter].name1,':');
        getline(dataFile, person[counter].address1);
        PNTree.insert(person[counter].key1, person[counter]);
}
dataFile.close();

insert调用的原型为"template <class KeyType, class DataType> bool BST<KeyType, DataType>::insert (KeyType key, DataType data)"。此外,我知道atoi是C而不是c++,但我也尝试过stringstream,也失败了!请帮助!

在试图对您的问题进行逆向工程后,我认为PNTree.insert是错误的。假设PNTree是一个std::map<int, person_type>,那么它的insert方法不接受这两个类型的参数。下面是三个插入成员。

pair<iterator,bool> insert (const value_type& val);
iterator insert (iterator position, const value_type& val);
template <class InputIterator>
void insert (InputIterator first, InputIterator last);

value_type是一个std::pair<int, person_type>。我假设您想要第一个,插入一个节点,在这种情况下,最简单的事情是:

PNTree[person[counter].key1] = person[counter];

还要注意,其中一些"数字"不能转换为int,它们只是太大了。您必须使用long longstd::string来保存这些

如果我要写这段代码,它看起来会更像这样: