- •140604 – Электропривод и автоматика промышленных установок и технологических комплексов
- •220301 – Автоматизация технологических процессов и производств
- •Содержание.
- •Введение
- •Домашняя работа № 1. Решение задач с обработкой строк
- •1. Цель работы
- •Подготовка к работе
- •Теоретическая часть:
- •Будьте осторожны при явной инициализации строки. Так, оператор
- •4. Задание.
- •5. Требования к отчету по домашней работе:
- •6. Варианты заданий.
- •Домашняя работа № 2. Решение задач с использованием файлов.
- •3.2 Форматированный режим обработки файлов Основные алгоритмы работы с файлами
- •1) Создание указателя на предопределенный тип file.
- •2) Открытие
- •Закрытие файла.
- •3.2.2 Особенности работы с текстовыми файлами:
- •3.2.3 Особенности работы с двоичными файлами.
- •Int fseek ( указатель_потока, число_перемещаемых_байтов, указатель);
- •3.3. Потоковая обработка файлов.
- •Основные алгоритмы работы с файлами
- •Порядок работы с потоками
- •1) Описание потоковой переменной
- •2) Открытие файла
- •Обработка
- •4) Закрыттие файла
- •3.4. Задачи редактирования файла
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •6. Варианты заданий:
- •7. Контрольные вопросы.
- •Список рекомендуемой литературы.
- •Из ресурсов электронно-библиотечной системы iQlib
- •Из электронных ресурсов ScienceDirect
1. Цель работы
Изучить и освоить методы составления программ на языке С++ с использованием строк.
Подготовка к работе
Необходимо знать основные особенности представления символов и строковых литералов в языке С++ [лекции 10, 14], способы их обработки, основные функции используемые для сравнения, копирования строк, вырезания и поиска подстроки (символа) в строке.
Теоретическая часть:
Для представления текстовой информации в языке С++ используются символы (константы), символьные переменные и строки (строковые константы), для которых в языке С++ не введено отдельного типа в отличие от некоторых других языков программирования. Строка– это последовательность символов, заключенная в двойные кавычки (" ").
Размещая строку в памяти, транслятор автоматически добавляет в ее конце символ '\0' (нулевой символ или нулевой байт, который является признаком конца строки). В записи строки может быть и один символ: "А" (заключен в двойные кавычки), однако, в отличие от символьной константы 'А' (используются апострофы), длина строки "А"равна 2 байтам.
В языке С++ строка – это пронумерованная последовательность символов (массив символов), она всегда имеет тип char[]. Все символы строки нумеруются, начиная с нуля. Символ конца строки также нумеруется – ему соответствует наибольший из номеров. Таким образом, строка считывается значением типа "массив символов". Количество элементов в таком массиве на 1 больше, чем изображение соответствующей строки, так как в конец строки добавлен нулевой символ '\0' (рис. 1).
Рис. 1. Представление строки и символа
Символьная строка в программном коде может располагаться на нескольких строках. Для переноса используется символ '\' с последующим нажатием клавиши ввод. Символ '\' игнорируется компилятором, и следующая строка считается продолжением предыдущей.
В С++ есть два вида строк:
С-строки (символьные);
класс стандартной библиотеки С++ string.
С-строка – это массив символов, завершающийся символом с кодом 0 (нуль-терминатором). Класс string более безопасен в использовании, но и более ресурсоемок, чем С-строки. Исходя из этого, строки можно обрабатывать двумя способами:
- как массив;
- используя строковые функции, описания которых находятся в заголовочном файле string.h (класс cstring).
Каждый из способов имеет свои достоинства и недостатки.
Порядок работы со строкой:
Описание строки (выделение памяти);
Инициализация (ввод) строки;
Обработка строк.
Для каждого из пунктов приведем различные варианты работы со строками, примеры использования команд и описаний строк, объясним, чем они отличаются друг от друга.
Описание строк.
Используется описатель:
char <имя_строки>[<длина>]
Длина динамической строки может быть выражением, не динамической строки – константным выражением (чаще всего константой):
const int len_s = 80;
char s[len_s]; //хранится 79 символов + 0-терминатор
При задании строки необходимо учитывать 0-терминатор.
Для размещения строки в динамической памяти:
char *p = new char[m]; // p – указатель на char
char *q = (char *)malloc(m * sizeof(char));
Инициализация (ввод) строк.
1) явная инициализация:
Строки при описании можно явно инициализировать строковыми константами:
char a[100] = “Строковая константа”;
или инициализировать как массив символов:
char str[10]={‘s’, ‘t’, ‘r’, ‘o’, ‘k’, ‘a’};
При явной инициализации строки ее размерность можно опускать, тогда компилятор сам выделит память, достаточную для размещения вводимой строки:
char a[] = “Строковая константа”; // выделено под 20 символов
