Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АиП -Лабораторная работа№3_2семестр.doc
Скачиваний:
2
Добавлен:
13.09.2019
Размер:
117.76 Кб
Скачать

Return ret;

4. Функция main()

Основным результатом нашего проекта должна быть функция substr(). Но эта функция не может выполняться самостоятельно, она должна вызываться из какой-нибудь внешней функции. Следовательно, чтобы заставить нашу функцию substr() выполняться и проверить ее выполнение, мы должны создать также и функцию main().

4.1. Переменные функции main() В функции main() должны быть объявлены переменные для:

  • строки-источника:

Char s1[80];

  • строки-результата:

Char s2[80];

  • позиции первого символа в подстроке:

int n;

  • длины подстроки:

int l;

  • того значения, которое вернет функция substr():

int r;

Пользуясь, случаем, сделаем небольшое отступление, чтобы предупредить Вас про возможность ошибки, которую часто допускают начинающие программисты. Зная, что обращение к символьным строкам в языке C++ происходит через указатель на начало строки, такие программисты иногда объявляют символьную строку как char *. Но такое объявление, например:

Char *s1;

выделяет память только для размещения указателя, но не для размещения самих символов строки. Если далее мы введем, например, 80 символов функцией cin.getline(s1,80), то символы разместятся там, куда показывает указатель s1, но значение этого указателя не определено, следовательно, и символы разместятся неизвестно где. Следовательно, символьная строка обязательно должна быть объявлена как массив символов - этим выделяется для нее память, а уже обращаться к ней можно через указатель.

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

4.2. Текст функции main()

После объявления переменных текст функции main() состоит из единственного бесконечного цикла. В каждой его итерации, прежде всего, выводится приглашение на ввод строки-источника.

Следующий оператор, возможно, требует более детального рассмотрения:

Cin.Getline(s1,80);

If (!strcmp(s1,"***")) break;

При его выполнении, прежде всего, выполняется функция cin.getline(s1,80), которая вводит данные в строку s1. Эта функция возвращает указатель на строку s1. Строка, на которую показывает этот указатель, сравнивается с помощью функции strcmp() со строковой константой "***". Если они равны, strcmp() возвращает 0, тогда значение логического выражения в условном операторе истинное и выполняется выход из бесконечного цикла. Следовательно, цикл будет выполняться, пока не будет введена строка "***".

Потом вводятся значения переменных n и l и выполняется вызов функции substr(), которой передаются параметры s1, s2, n, l. Значения, которое возвращает substr(), присваивается переменной r.

Строка-источник, строка-результат и возвращенное значение выводятся на экран, и цикл повторяется. (Обратите внимание на то, что при выводе символьных строк мы берем их в "скобки": >> <<. Это сделано для того, чтобы на экране можно было разглядеть символы-пробелы, которые могут быть в начале и в конце строк.)

4.3. Общие объявления

В функции main() применяются библиотечные функции ввода-вывода и функция сравнения строк, так что включим в программу файлы iostream.h и string.h. Кроме того, следует включить и описание функции substr().

Полный текст программы приведен ниже.