Вопрос 1:Как работать со строками в языке c.Пример.
Строка – это последовательность ASCII или UNICODE символов. Строки в си, как и в большинстве языков программирования высокого уровня рассматриваются как отдельный тип, входящий в систему базовых типов языка. Так как язык СИ по своему происхождению является языком системного программирования, то строковый тип данных в нем как таковой отсутствует, а в качестве строк в си используются обычные массивы символов. Исторически сложилось два представления формата строк: 1. формат ANSI; 2. строки с завершающим нулем (используется в СИ). Формат ANSI устанавливает, что значением первой позиции в строке является ее длина, а затем следуют сами символы строки. Например, представление строки "Моя строка!" будет следующим: 11 ‘М’ ‘о’ ‘я’ ‘ ’ ‘с’ ‘т’ ‘р’ ‘о’ ‘к’ ‘а’ ‘!’ В строках с завершающим нулем, значащие символы строки указываются с первой позиции, а признаком завершения строки является значение ноль. Представление рассмотренной ранее строки в этом формате имеет вид: ‘М’ ‘о’ ‘я’ ‘ ’ ‘с’ ‘т’ ‘р’ ‘о’ ‘к’ ‘а’ ‘!’ 0
Работа со строками в СИ:
Так как строки на языке СИ являются массивами символов, то к любому символу строки можно обратиться по его индексу. Для этого используется синтаксис обращения к элементу массива, поэтому первый символ в строке имеет индекс ноль. Например, в следующем фрагменте программы в строке str осуществляется замена всех символов ‘a’ на символы ‘A’ и наоборот. for(int i=0;str[i]!=0;i++) { if(str[i] == ‘a’) str[i] = ‘A’; else if(str[i] == ‘A’) str[i] = ‘a’; }
Функции для работы со строками в СИ
Все библиотечные функции, предназначенные для работы со строками, можно разделить на три группы: 1. ввод и вывод строк; 2. преобразование строк; 3. обработка строк.
Вопрос 2:Связь между объединёнными и классами в C++.Ограничения
Точно так же, как структуры и классы связаны между собой, связаны и объединения и классы. Объединения представляют по существу структуру, в которой все элементы хранятся в одном и том же месте. Объединения могут содержать конструкторы и деструкторы, а также функции-члены и дружественные функции. Подобно структурам, члены объединения по умолчанию имеют в качестве спецификатора доступа public. Например, следующая программа использует объединение для вывода символов, соответствующих старшему и младшему байтам короткого целого (имеющего размер в два байта как для 16-битных, так и для 32-битных сред): #include <iostream.h> union u_type { u_type(short int a); // по умолчанию публичные void showchars (); short int i; char ch[2]; }; // конструктор u_type::u_type(short int a) { i = a; } // показ символов, которые содержит short int. void u_type::showchars() cout << ch [ 0 ] << " "; cout << ch [ 1 ] << "\n"; int main() u_type u(1000); u.showchars (); return 0; }
Важно понимать, что подобно структуре, объявление объединения определяет тип класса. Это означает, что принципы инкапсуляции сохраняют свою силу.
Имеется несколько ограничений, которые необходимо иметь в виду при использовании объединений в С++. Первое — объединение не может наследовать какие-либо другие классы. Далее объединение не может использоваться в качестве базового класса. Объединение не может иметь виртуальные функции-члены. Никакие статические переменные не могут быть членами объединения. Объединение не может иметь в качестве члена какой-либо объект, перегружающий оператор =. Наконец, никакой объект не может быть членом объединения, если этот объект имеет конструктор или деструктор.
Билет 10:
