
- •Лекция № 29
- •Общие сведения о строках.
- •Работа со строками с помощью указателей.
- •Функции работы со строками.
- •1. Общие сведения о строках.
- •2. Работа строками с помощью указателей.
- •3. Функции работы со строками.
- •Лекция № 30
- •2. Конструкторы и присваивание строк.
- •3. Операции
- •4. Функции (самостоятельная работа)
- •Лекция № 32
- •2. Инициализация структур.
- •3. Доступ к полям структуры.
- •4. Битовые поля.
- •5. Объединения (union).
- •Лекция № 32 а (самостоятельная работа)
- •2. Структуры и массивы.
- •3. Массивы структур.
- •4. Копирование структур.
- •5. Примеры решения задач.
- •Лекция № 33
- •2. Пример 2.
- •3. Пример 3.
- •4. Пример 4.
- •Лекция № 34
- •2. Доступ к файлу.
- •3. Функции для работы с файлами.
- •4. Примеры решения задач.
3. Операции
Приведем допустимые для объектов класса string операции:
Операция Действие Операция Действие
= присваивание > больше
+ конкатенация >= больше или равно
= = равенство [ ] индексация
!= неравенство << вывод
< меньше >> ввод
<= меньше или равно += добавление
Синтаксис операций и их действия очевидны. Размеры строк устанавливаются автоматически так, чтобы объект мог содержать присваиваемое ему значение. Надо отметить, что для строк типа string не соблюдается соответствие между адресом первого элемента строки и именем, как это было в случае строк старого стиля, то есть &s[0] не равно s.
Кроме операции индексации, для доступа к элементу строки определена функция at:
string s(“Вася”);
cout<< s.at(1); // будет введен символ а
Если индекс превышает длину строки, порождается исключение out_of_range.
4. Функции (самостоятельная работа)
Функции класса string дял удобства рассмотрения можно разбить на несколько категорий: присваивания и добавления частей строк, преобразование строк, поиск подстроки, сравнение и получение характеристик строк.
Для присваивания части одной строки другой служит функция assign:
assign (const string& str);
assign (const string& str, size_type pos, size_type n);
assign (const char* s, size_type n);
Первая форма функции присваивает строку str вызывающей строке, при этом действие функции эквивалентно операции присваивания.
Вторая форма присваивает вызывающей строке часть строки str, начиная с позиции pos. Если pos больше длины строки, порождается исключение out_of_range. Вызывающей строке присваивается n символов, либо pos+n больше, чем длина строки str, все символы до конца строки str.
Третья форма присваивает вызывающей строке n символов строки s старого типа.
Для добавления части одной строки к другой служит функция append:
append (const string& str);
append (const string& str, size_type pos, size_type n);
append (const char* s, size_type n);
Первая форма функции добавляет строку str к концу вызывающей строки, при этом действие функции эквивалентно операции конкатенации (+).
Вторая форма добавляет к вызывающей строке часть строки str, начиная с позиции pos.
Третья форма добавляет к вызывающей строке n символов строки s старого типа.
Для вставки в одну строку части другой строки служит функция insert.
Для удаления части строки служит функция erase.
Для замены части строки служит функция replace.
Для обмена содержимого двух строк служит функция swap.
Для выделения части строки служит функция substr.
Функции поиска подстрок, сравнения частей строк и получения характеристик строк выписать самостоятельно страницы 291 – 293 из источника С/С++. Программирование на языке высокого уровня / Т.А.Павловская. – СПб.: Питер, 2001. – 464с.: ил.
Лекция № 32
Тема : Записи – структура языка С. Создание структуры объединяющей разные типы данных.
План
Создание структуры.
Инициализация структур.
Доступ к полям структуры.
Битовые поля.
Объединения (union).
1. Создание структуры.
В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке С структуры определены следующим образом :
struct [имя_типа] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [список_описателей];
Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него. Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка :
// Определение массива структур и указателя на структуру :
struct {
char fio [30];
int date, code;
double salary;
} stuff [100], *ps;
Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например :
struct Worker { // описание нового типа Worker
char fio[30]
int date, code;
double salary;
}; // описание заканчивается точкой с запятой
// определение массива типа Worker и указателя на тип Worker;
Worker stuff[100], *ps;
Имя структуры можно использовать сразу после его объявления (определение можно дать позднее) в тех случаях, когда компилятору не требуется знать размер структуры, например :
struct List; // объявление структуры List
struct Link {
L:ist *p; // указатель на структуру List
Link *prev, *succ; // указатель на структуру Link
};
struct List { /* определение структуры List */}
Это позволяет создавать связанные списки структур.