首先,我不想要编码,我想自己编写这些代码,但我现在已经不在考虑这部分,所以任何帮助都会受到赞赏,但我不想写任何代码
这是我似乎无法解决的问题。
好的我正在重新编辑这个问题。
假设我们从ifstream(文本文件)读取输入并且系统结束文件条件信号输入结束
我没有得到的部分是错误处理的一部分......
我们如何知道何时停止每人大于或小于4的输入?
答案 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.
}