Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 10:

Решение задач на обработку строк

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Лабораторная работа 9. Решение задач на обработку строк

Цель работы: изучить принципы работы со строками и указателями на строки, алгоритмы решения задач на обработку строковых данных, научиться приемам решения задач на обработку строк, используя, функции для работы со строками и указателями на строки в языке С++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе одну или несколько строк символов (в зависимости от постановки задачи), выполняет обработку строк в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи (к задачам 2 и 3 приведен рекомендуемый вид диалога во время работы программы). Ограничениями на входные данные является максимальный размер строковых данных в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 9.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Дана строка, в которой слова разделены одним пробелом. Найдите и распечатайте все слова указанной длины n.
  2. Дана строка из символов латинского алфавита. Вставьте пробел перед каждой заглавной буквой. Перед первой буквой пробел добавлять не надо. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
    Введите строку символов латинского алфавита:
    AtTimesYouMayWantToReadDataFromTheKeyBoard
    Полученная строка: At Times You May Want To Read Data 
    From The Key Board
  3. Написать программу, которая вычисляет значение выражения N0O1N1O2...OkNk, где Ni – целое число, Oi – один из двух знаков простейших арифметических действий: сложение (+) и вычитание (–). Считать, что данные введены корректно: в строке заданы только цифры и указанные знаки действий. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
    Введите арифметическое выражение,
    например, 45+5-3-125+2 (пробелы и другие знаки недопустимы)
    354-457+74+2-37
    Значение выражения 354-457+74+2-37 = -64
  4. Дана строка. Проверьте правильность расстановки в ней круглых скобок: каждой открытой скобке должна соответствовать корректно закрытая скобка.
  5. Найдите в строке самый часто встречающийся символ. Распечатайте символ и число его повторений.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными методами обработки строковых и символьных данных в языке С++. При разработке программного кода требуется использовать метод процедурной абстракции и комментировать фрагменты кода.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Почему обращения к строке через ее имя и через указатель эквивалентны?
  2. Почему в качестве параметра функции передается адрес строки, а не сама строка символов?
  3. Возможно ли применение операций инкремента и декремента к указателю на строку? Если да, то что будет адресовать полученный указатель?
  4. Почему при формировании строки без использования стандартных функций необходимо дописывать символ конца строки? Почему этого не требуется при считывании строк с клавиатуры?
  5. Какие возможны ошибки в программе при некорректной работе со строками?
  6. Для защиты строки от изменения объявляется указатель на константу или указатель-константа? Почему?
< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Андрей Садовщиков
Андрей Садовщиков
Россия