<< "Requested query: "
<< *query << "\n\n";
const set<short,less<short>,allocator> *solution = query->solution();
if ( ! solution->size() ) {
cout << "\n\t"
<< "Sorry, no matching lines were found in text.\n"
<< endl;
}
set<short>::const_iterator
it = solution->begin(),
end_it = solution->end();
for ( ; it != end_it; ++it ) {
int line = *it;
// пронумеруем строки с 1 ...
cout << "( " << line+1 << " ) "
<< (*lines_of_text)[line] << '\n';
}
cout << endl;
}
Упражнение 17.26
Нашему классу TextQuery не хватает возможности принимать аргументы, заданные пользователем в командной строке.
(a) Предложите синтаксис командной строки для нашей поисковой системы.
(b) Добавьте в класс необходимые данные и функции-члены.
(c) Предложите средства для работы с командной строкой (см. пример в разделе 7.8).
Упражнение 17.27
В качестве темы для рабочего проекта рассмотрите следующие усовершенствования нашей поисковой системы:
(a) Реализуйте поддержку, необходимую для представления запроса AndQuery в виде одной строки, например “Motion Picture Screen Cartoonists”.
(b) Реализуйте поддержку для ответа на запрос на основе вхождения слов не в строку, а в предложение.
(c) Реализуйте подсистему хранения истории, с помощью которой пользователь мог бы ссылаться на предыдущий запрос по номеру, возможно, комбинируя его с новым запросом.
(d) Вместо того чтобы показывать счетчик найденных и все найденные строки, реализуйте возможность задать диапазон выводимых строк для промежуточных вычислений и для окончательного ответа:
==> John && Jacob && Astor
(1) john ( 3 ) lines match
(2) jacob ( 3 ) lines match
(3) john && jacob ( 3 ) lines match
(4) astor ( 3 ) lines match
(5) john && jacob && astor ( 5 ) lines match
// Новая возможность: пусть пользователь укажет, какой запрос выводить
// пользователь вводит число
==> вывести? 3
// Затем система спрашивает, сколько строк выводить
// при нажатии клавиши Enter выводятся все строки,
// но пользователь может также ввести номер одной строки или диапазон
ð сколько (Enter выводит все, иначе введите номер строки или диапазон) 1-3