C ++文件i / o流问题

时间:2011-08-04 04:12:12

标签: c++ sorting file-io

首先,我不想要编码,我想自己编写这些代码,但我现在已经不在考虑这部分,所以任何帮助都会受到赞赏,但我不想写任何代码

这是我似乎无法解决的问题。

好的我正在重新编辑这个问题。

假设我们从ifstream(文本文件)读取输入并且系统结束文件条件信号输入结束

  • 第一行的姓氏最多为20个字符
  • 第二行是人名为10 char
  • 的人
  • 第三行是两个字符的邮政服务缩写 2 char
  • 第四行是公司最多40个字符

我没有得到的部分是错误处理的一部分......

  • 每位与会者的四条输入行将被拒绝

我们如何知道何时停止每人大于或小于4的输入?

2 个答案:

答案 0 :(得分:2)

这篇文章并不完全清楚,但根据给定的信息,这就是我在飞行中提出的:

首先制作一个容器(数组,矢量,列表,地图等)来保存状态的名称。您将需要它来检查一系列条目是否有效。

现在,您说条目(每个单独的记录[即姓名,名称,州,公司])由换行符分隔。使用这些信息,我会读到一行,直到你打一个空白行并将它们存放到一个容器中暂时保存。

当您到达新行(发出新记录的信号)时,请检查临时容器。如果它包含4个字符串(行)并且按以下顺序排列:非状态,非状态,状态,非状态;然后将其视为有效记录并将其存储在永久容器中并清除临时容器。

继续此操作,直至到达文件末尾。

希望这有帮助,因为你明确要求没有代码。

答案 1 :(得分:0)

保持状态的位图:

bool state_bitmap[NUM_STATES];

使用所有状态对其进行初始化:

state_bitmap[hash_code ("state1")] = true;
state_bitmap[hash_code ("state2")] = true;
// ...

对于在状态位置读取的每个字符串,请确保它位于位图中:

std::string state = read_state_from_file ();
if (!state_bitmap[hash_code (state)]
{
    // Not a state!
}

如果问题与重复名称有关,您可以采用类似的方法。 阅读每个字符串并将其映射到bool,如果它不在地图中那里:

std::map<std::string, bool> names;

std::string name = read_next_name_from_file ();
if (!names[name])
{
    names[name] = true;
}
else
{
    // name already in map, do something about that.
}