Символьные данные и строки
Лабораторная работа 7. Символьные данные и строки
Цель работы: изучить особенности внутреннего представления символьных данных и строк, научиться выполнять ввод/вывод, просмотр и замену в строках при решении задач на языке C++.
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе одну или несколько строк символов (в зависимости от постановки задачи), выполняет обработку строк в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является максимальный размер строковых данных в языке С++.
Теоретические сведения.
Ознакомьтесь с материалом лекции 7.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
- Введите предложение, слова в котором разделены пробелами и в конце которого стоит точка. Удалите повторяющиеся пробелы между отдельными словами (оставляя по одному пробелу), выведите отредактированное предложение на экран.
- Дана строка. Выполните символьный анализ текста. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
Введите строку Город Тула основан в 1946 г. I was burn in Tula in 1991. Во введенной строке: малых русских букв – 16 заглавных русских букв – 2 малых латинских букв – 14 заглавных латинских букв – 2 цифровых символов –8 остальных символов – 14
- Напишите программу, которая проверяет, является ли введенная с клавиатуры строка целым числом (знак числа не учитывать). Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
Введите число: 24.5 Введенная строка не является целым числом.
- Введите строку и символ. Определите частоту появления данного символа в строке. Частота вычисляется как отношение количества данных символов в строке к длине всей строки (пробелы учитываются, а символ конца строки не учитывается). Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом.
Введите строку > Мама мыла раму. Введите символ > а Частота появления символа 'а' в строке "Мама мыла раму." равна 0,27
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами обработки строковых и символьных данных в языке С++.
Следует реализовать каждое задание в соответствии с приведенными этапами:
- изучить словесную постановку задачи, выделив при этом все виды данных;
- сформулировать математическую постановку задачи;
- выбрать метод решения задачи, если это необходимо;
- разработать графическую схему алгоритма;
- записать разработанный алгоритм на языке С++;
- разработать контрольный тест к программе;
- отладить программу;
- представить отчет по работе.
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
- Титульный лист.
- Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
- Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
- Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
- Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
- Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
- Выводы по лабораторной работе.
- Ответы на контрольные вопросы.
Контрольные вопросы
- Почему в С++ не выполняется операция прямого присваивания значения строке?
- Почему символ и строка, состоящая из одного символа, занимают разный объем памяти?
- Почему в функции scanf("%s",string); не указывается обращение к переменной по адресу?
- Допустима ли операция сравнения над символами? Если да, то каким образом определены отношения "больше" и "меньше"?
- Какая из функций, gets или puts, заносит в поток управляющий символ '\n' и с какой целью?
- Можно ли выполнить присваивание символьной переменной числового значения? Почему?
- В чем различия результатов вывода символьной переменной со спецификаторами %d и %c?