Проблема с потоком ввода-вывода файла C ++ - PullRequest
0 голосов
/ 04 августа 2011

Прежде всего, я НЕ ХОЧУ КОДОВ Я хочу написать их сам, но у меня нет идеи для этой части, поэтому любая помощь будет оценена, НО Я НЕ ХОЧУ, ЧТОБЫ написать ЛЮБОЙ КОД

Вот проблема, которую я не могу решить.

ладно, я отредактирую это, чтобы дать вам вопросы.

Предполагается, что мы читаем ввод из ifstream (текстовый файл) и конец системного сигнала о состоянии файла конца ввода

  • первая строка - фамилия до 20 символов
  • вторая строка - имя человека до 10 символов
  • третья строка - двухбуквенное сокращение почтовой службы до 2 символа
  • Четвёртая строка - компания до 40 символов

часть, которую я не получаю, является частью обработки ошибки ...

  • будет отклонено меньше или больше четырех строк ввода на участника

как мы узнаем, когда нужно остановиться для более или менее 4 человек на входе?

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Пост не совсем понятен, но с учетом приведенной информации это то, что я придумал на лету:

Сначала создайте контейнер (массив, вектор, список, карту и т. Д.) Для хранения имен Штатов. Это необходимо для проверки правильности серии записей.

Теперь вы сказали, что записи (каждая отдельная запись [то есть имя, имя, штат, компания]) разделены переводами строки. Используя эту информацию, я буду читать строки, пока вы не наберете пустую строку и не сохраните их в контейнере для временного хранения.

Когда вы достигнете новой строки (сигнализируя о новой записи), проверьте временный контейнер. Если он содержит 4 строки (строки) и имеет порядок: non-state, non-state, state, non-state; затем сочтите это действительной записью и сохраните ее в постоянном контейнере и очистите временный контейнер.

Продолжайте, пока не дойдете до конца файла.

Надеюсь, что это помогает и имеет смысл, поскольку вы явно просили отсутствие кода.

0 голосов
/ 04 августа 2011

Сохранить растровое изображение состояний:

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.
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...