Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНСПЕКТ1.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
292 Кб
Скачать
☆

Объединения. Строковые литералы

Объединение (union) – представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо ключевого слова struct используется слово union.

Длинна объединения равна наибольшей из длин его полей. В каждый момент времени в переменной типа объединение хранится только одно значение, и ответственность за его правильно использование лежит на программисте.

Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется.

Пример:

#include <iostream>

Using namespace std;

Int main () {

Enum paytype {CARD, CHECK};

Paytype ptype;

Union payment {

Char card[25];

Long check; }

Info;

// присваивание значений info и ptype

Switch (ptype) {

Case CARD: cout «”Оплата по карте:”« info.card;break;

Case CHECK: cout « “Оплата чеком:”«info.check;break;

}

Return 0;

}

Объединение часто используют в качестве поля структуры, при этом в структуру удобно включить дополнительное поле, определяющее, какой, именно элемент объединения используется в каждый момент.

Имя объединения можно не указывать, что позволяет обращаться к его полям непосредственно.

Пример 2:

#include <iostream>

Using namespace std;

Int main () {

Enum paytype {CARD, CHECK};

Paytype ptype;

Union payment {

Char card[25];

Long check; }

Info;

// присваивание значений info и ptype

Switch (ptype) {

Case CARD: cout «”Оплата по карте:”« info.card;break;

Case CHECK: cout « “Оплата чеком:”«info.check;break;

}

Return 0;

}

СТРОКИ

Строка представляет собой массив символов, заканчивающийся нуль-символом.

Нуль-символ – это символ с кодом, равным 0, что записывается в виде управляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковым литералом.

Под строку «Vasja» выделяется 10 байт, 5 из них которых занято под символы строки, а шестой – под нуль-символ.

Char str[10]=”Vasja”;

// выделено 10 элементов с номерами от 0 до 9

// первые элементы – ‘V’, ‘a’, ‘s’, ‘j’, ‘a’, ‘\0’

Если строка при определении инициализируется, её размерность можно опускать (компилятор сам выделит соответствующее количество байт):

Char str[] = “Vasja”;// выделено и заполнено

// 6 байт.

Оператор char*str=”Vasia” создает не строковую переменную, а указатель на строковую константу, изменить которую невозможно. Знак равенства перед строковым литералом означает инициализацию, а не присваивание. Операция присваивания одной строки другой не определена (поскольку строка является массивом( и может выполняться с помощью цикла или функций стандартной библиотеки).

Функции для работы со строками

  • Strcmp – сравнивает две строки

  • Stricm -

  • strcpy – копирует строку в другую строку

  • strcat – добавляет строку

  • strstr – поиск строки

  • strlen – вычисление длинны строки

#include <iostream>

#include <cstring>

Using namespace std;

Int main() {

Char s[80],passw[] = “kuku”;

Int I; k=0;

For (i=0; !k && i<3; i++){

Cout <<”vvedite parol:” <<endl;

Gets (s);

If (strstr(s,passw)) k=1;

}

If (k) cout <<”yes”;

Else cout << “NO”;

Return 0;

}