Программирование >>  Инициализация объектов класса, структура 

1 ... 304 305 306 [ 307 ] 308 309 310 ... 395


TextQuery::query text()

С++ для/налинаю1; объекты: 921

* text: содержит все слова запроса

* ery text: вектор для хранения пользовательского запроса

* caps: фильтр для поддержки преобразования

* прописн1х букв в строчнхе

* user query: объект UserQuery, в котором инкапсулировано

* собственно вычисление ответа на запрос */

string text;

string caps( ABCDEFGHIJKOPQRSTUVWXYZ ); vector<string, allocator> query text; UserQuery user query;

/ / инициализировать статические членах UserQuery

NotQuery::all locs( text locations->second ); AAndQuery: :max col ( &line cnt ); UserQuery::word map( word map );

do {

удать пред1дущий запрос, если он б1л query text.clear();

cout << Введите запрос. Пожалуйста, разделяйте все его элементы пробелами.\n

<< а=р ;

<< Запрос (и весь сеанс) завершается точкой ( . ) .\n\n

* прочитать запрос из стандартного ввода,

* преобразовать все заглавные буквы, после

упаковать его в query text ...

е: здесь производятся все действия по запроса, связанные собственно с текстом

while

while( cin >> text )

if ( text == . )

break;

string::size type pos = 0;

while (( pos = text.find first of( caps, pos )) != string::npos )

text[pos] = tolower( text[pos] );

query text.push back( text );

теперь у нас есть внутреннее представление запроса обработаем его ...

if ( ! query text.empty() )

передать запрос объекту UserQuery

user ery.query( &query text ); вычислить ответ на запрос

/ / вернуть иерархию Query* подробности см. в разделе 17.7

query - это член класса TextQuery типа Query* query = user query.eval query();

query =

вычислить иерархию Query, реализация описана в разделе 17.7 query->eval();

вести ответ с помощью функции-члена класса TextQuery display solution();

вывести на терминал пользователя дополнительную пустую строку

cout << endl;



Введите запрос. Пожалуйста, разделяйте все его элементы пробелами. Запрос (или весь сеанс) завершается точкой ( . ). ==> John && Jacob && Astor

john ( 3 ) lines match

Jacob ( 3 ) lines match

john && jacob ( 3 ) lines match

astor ( 3 ) lines match

john && Jacob && astor ( 5 ) lines match Requested query: john && jacob && astor

( 34 ) All who know me consider me an eminently /safe/ man. The late John Jacob

35 ) Astor, a personage little given to poethic enthusiasm, had no esitation in

38 ) my profession by the late John Jacob Astor, a name which, I admit

love to

40 ) bullion. I will freely add that I was not insensible to the late

John Jacob

( 41 ) Astors good opinion.

Следующий запрос, в котором тестируются скобки и составные операторы, обращен к тексту новеллы Heart of Darkness Джозефа Конрада:

==> horror ( absurd && mystery ) ( North && Pole )

horror ( 5 ) lines match absurd ( 8 ) lines match mystery ( 12 ) lines matc

horror

absurd

lines match

stery )

horror ( absurd && mystery ) ( 6 ) lines match north ( 2 ) lines match pole ( 7 ) lines match

( north && pole ) ( 1 ) lines match horror ( absurd && mystery ) ( north && pole ) ( 7 ) lines match

Requested query: horror ( absurd && mystery ) ( north && pole ) ( 257 ) up I will go there. The North Pole was one of these 952 ) horros. The heavy pole had skinned his poor nose

3055 3673

3913

some lightless region of subtle horrors, where pure, The horror! The horror!

the whispered cry, The horror! The horror!

( 3957 ) absurd mysteries not fit for a human being to behold. ( 4088 ) wind. The horror! The horror!

Последний запрос был обращен к отрывку из романа Генри Джеймса Portrait of a Lady . В нем иллюстрируется составной запрос в применении к большому текстовому файлу:

==> clever && trick devious

clever ( 46 ) lines match trick ( 12 ) lines match clever && trick ( 2 ) lines match devious ( 1 ) lines match

clever && trick devious ( 3 ) lines match Requested query: clever && trick devious

( 13914 ) clever trick she had guessed. Isabel, as she herself grew older

Тестируя программу, мы применили ее к нескольким текстам. Первым стал короткий рассказ Германа Мелвилла Bartleby . Здесь иллюстрируется составной запрос AAndQuery, для которого подходящие слова расположены в соседних строках. (Отметим, что слова, заключенные между символами косой черты, предполагаются набранными курсивом.)



( 13935 ) lost the desire to know this ladys clever trick. If she had ( 14974 ) desultory, so devious, so much the reverse of processional.

There were

Упражнение 17.23

Реализованная нами обработка запроса пользователя обладает одним недостатком: она не применяет к каждому слову те же предварительные фильтры, что и программа, строящая вектор позиций (см. разделы 6.9 и 6.10). Например, пользователь, который хочет найти слово miaps , обнаружит, что в нашем представлении текста распознается только miap , поскольку существительные во множественном числе приводятся к форме в единственном числе. Модифицируйте функцию query text() так, чтобы она применяла эквивалентные фильтры к словам запроса.

Упражнение 17.24

Поисковую систему можно было бы усовершенствовать, добавив еще одну разновидность запроса И , которую mi назовем InclusiveAndQuery и будем обозначать символом &. Строка текста удовлетворяет условиям запроса, если в ней находятся оба указанных слова, пусть даже не рядом. Например, строка

i We were her pride of ten, she named us

удовлетворяет запросу:

pride & ten

pride && ten

Поддержите запрос InclusiveAndQuery. Упражнение 17.25

Представленная ниже реализация функции display solution() может выводить только в стандартн1й в1вод. Более правильно б1ло бы позволить пользователю самому задавать поток ostream, в который надо направить вывод. Модифицируйте display solution() так, чтобы ostream можно было задавать. Какие еще изменения необходимо внести в определение класса UserQuery?

но не:



1 ... 304 305 306 [ 307 ] 308 309 310 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика