【问题标题】:Reading in both strings and ints from a text file c++从文本文件 C++ 中读取字符串和整数
【发布时间】:2023-04-09 05:17:01
【问题描述】:

好的,这是交易。下面是来自我的文件的输入。

 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。检查完所有内容后,我认为我的插入工作正常。它正确地将名称和地址插入每个位置,但 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 &lt;class KeyType, class DataType&gt; bool BST&lt;KeyType, DataType&gt;::insert (KeyType key, DataType data)”。 另外,我知道 atoi 是 C 而不是 C++,但我也尝试了 stringstream,但也失败了!请帮忙!

【问题讨论】:

  • 这是您在记事本中打开文件时看到的文件内容,还是真的是 RTF 文件?
  • 首先您应该将“phone.dat.rtf”转换为纯文本文件。
  • 你为什么不用>>操作符?
  • @Kay 并不是必需的,尽管 rtf 格式很糟糕。
  • 第一个值是整数还是数字字符串?因为其中 3 个无法像您尝试的那样转换为 ints。

标签: c++ iostream


【解决方案1】:

在尝试reverse-engineer your problem之后,我认为PNTree.insert是错误的。假设PNTreestd::map&lt;int, person_type&gt;,那么它的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_typestd::pair&lt;int, person_type&gt;。我想你想要第一个,插入一个 node,在这种情况下,最简单的事情是:

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

另请注意,其中几个“数字”不能转换为int,它们太大了。您必须使用long longstd::string 来保存它们。

如果我要编写这段代码,它看起来更像this

【讨论】:

  • 检查完所有内容后,我认为我的插入工作正常,它将名称和地址正确插入每个位置,但在 key1 中添加了奇怪的数字。另外,上面的数字是错误的.. idk 当我发布问题时发生了什么,它们都被认为是 7 位数长(电话号码)。至于insert函数接受什么,看起来如下
  • 模板 bool BST::insert (KeyType key, DataType data)
  • @user2167064:看,知道你正在使用 BST 类会非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多