Лабораторная работа №6

Строки

Задача:

Найти в предложении слово, состоящее из наибольшего количества разных букв.

Решение:

Макросом MAX_ELEMENTS указываем максимальную длину сообщения, то есть длину в 100 символов. Далее следуеют определения функций IsLetter, CalcRepChars, FindMax.

Функция IsLetter проверяет является ли символ буквой английского алфавита. Если это так, то возвращается значение истины из функции ( true ), иначе – ложь ( false ).

Функция CalcRepChars вычисляет количество различных символов в слове и присваивает его в качестве результата переменной n. Так как переменная n передаётся по указателю в функцию, то есть фактически передаётся её адрес в оперативной памяти, то после завершения работы функции CalcRepChars переменная n изменит своё значение в той области памяти, из которой передалось управление функции CalcRepChars.

Функция FindMax вычисляет номер слова, которое состоит из наибольшего количества различных букв. По аналогии с функцией CalcRepChars результат вычисления функции FindMax присваиваеся переменной m.

Далее входим в функции main, в ней объявляем массив string длиной, указанной в макросе MAX_ELEMENTS. Затем по коду идёт вывод сообщения о том, что нужно ввести сообщение. Ввод сообщения будет осуществляться через функцию gets. Функция gets прерывает выполнение программы, запрашивая при этом ввод с клавиатуры до нажатия клавиши enter, после которого введённая строка запишется в массив в string.

Переменная word будет хранить количество слов в предложении. Массивы s, e, n будут хранить начальную позицию слова в предложении, конечную позицию и количество различных букв в этом слове соответственно.

Затемс помощью функции memset заполняем содержимое массивов s, e, n.

Далее следует цикл, в котором осуществляется проход по всему сообщению. Проверяется символ на букву. В случае успеха, устанавливается начальная позиция предполагаемого слова, иначе – устанавливается конечная позиция этого слова. Потом на основании вычисленных позиций слова вызывается функция CalcRepChars, в которую передаётся строка с хранимом предложением, позиция, с которой начинается слова, позиция, с которой слова заканчивается, и переменная, которая после завершения работы функции CalcRepChars, будет хранить количество различных букв в слове.

Таким образом с помощью цикла мы обрабатываем все слова предложения.

Далее определяем переменную m, которая будет хранить номер предложения с максимальным количеством различных букв в результате работы функции FindMax, в которую передастся адрес переменной m.

Затем, получив номер m требуемого слова в предложении, выводим его на экран с указанной позиции s[m] и по указанную позицию e[m] в этом предложении.

Наконец, операцией return 0; управление передаётся операционной системе.