Читаем C++ для начинающих полностью

Напишите функции print() для класса UserQuery. Обоснуйте свой выбор того, что она выводит.

<p>17.8. Соберем все вместе</p>

Функция main() для нашего приложения текстового поиска выглядит следующим образом:

#include "TextQuery.h"

int main()

{

TextQuery tq;

tq.build_up_text();

tq.query_text();

}

Функция-член build_text_map() - это не что иное, как переименованная функция doit() из раздела 6.14:

inline void

TextQuery::

build_text_map()

{

retrieve_text();

separate_words();

filter_text();

suffix_text();

strip_caps();

build_word_map();

}

Функция-член query_text() заменяет одноименную функцию из раздела 6.14. В первоначальной реализации в ее обязанности входили прием запроса от пользователя и вывод ответа. Мы решили сохранить за query_text() эти задачи, но реализовать ее по-другому:

void

TextQuery::query_text()

{

/* локальные объекты:

*

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

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

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

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

*

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

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

*/

string text;

string caps( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" );

vectorstring, allocator query_text;

UserQuery user_query;

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

NotQuery::all_locs( text_locations-second );

AndQuery::max_col( &line_cnt );

UserQuery::word_map( word_map );

do {

// удалить предыдущий запрос, если он был

query_text.clear();

cout "Введите запрос. Пожалуйста, разделяйте все его "

"элементы пробелами.\n"

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

"== ";

/*

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

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

* упаковать его в query_text ...

*

* примечание: здесь производятся все действия по

* обработке запроса, связанные собственно с текстом ...

*/

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_query.query( &query_text );

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

// вернуть иерархию Query*

// подробности см. в разделе 17.7

// query - это член класса TextQuery типа Query*

query = user_query.eval_query();

// вычислить иерархию Query,

// реализация описана в разделе 17.7

query-eval();

// вывести ответ с помощью

// функции-члена класса TextQuery

display_solution();

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

// пустую строку

cout endl;

}

}

while ( ! query_text.empty() );

cout "До свидания!\n";

}

Перейти на страницу:

Похожие книги

Язык программирования C++. Пятое издание
Язык программирования C++. Пятое издание

Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!Р'С‹ держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под стандарт С++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. Р' соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать РёС… наилучшие СЃРїРѕСЃРѕР±С‹ применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.Стенли Р'. Липпман работал старшим консультантом в Jet Propulsion Laboratory, архитектором РіСЂСѓРїРїС‹ Visual С++ корпорации Microsoft, техническим сотрудником Bell Laboratories и главным инженером- программистом по анимации в кинокомпаниях Disney, DreamWorks, Pixar и PDI.Р–РѕР·и Лажойе, работающий ныне в кинокомпании Pixar, был членом канадской РіСЂСѓРїРїС‹ разработчиков компилятора C/C++ корпорации IBM, а также возглавлял рабочую группу базового языка С++ в составе международной организации по стандартизации ANSI/ISO.Барбара Э. Му имеет почти тридцатилетний опыт программирования. На протяжении пятнадцати лет она работала в компании AT&T, сотрудничая с Бьярне Страуструпом, автором языка С++, и несколько лет руководила РіСЂСѓРїРїРѕР№ разработчиков С++.• Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования• Р

Барбара Э. Му , Жози Лажойе , Стенли Б. Липпман

Программирование, программы, базы данных
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT