polevoy_cpp_2012_spring_lecture_07
.pdfОбъектно-ориентированное программирование
с использованием C++
Полевой Дмитрий Валерьевич к.т.н., доцент КиК
e-mail: oop.misis@gmail.com
Символ
•графическое начертание
•код (числовое значение при хранении в памяти)
•символьный набор (кодовая таблица)
24.03.2012 |
cppNewb.ru |
2 |
Си-строка
•массив символов заканчивающийся нуль-терминатором
•источник постоянных ошибок
24.03.2012 |
cppNewb.ru |
3 |
Проблемы манипуляции с Си-строками
•низкоуровневая работа с массивом
•отслеживание конца строки
•отслеживание размера буфера
•большое число функций
24.03.2012 |
cppNewb.ru |
4 |
Кодовые таблицы и юникод
•char и wchar_t
•национальные таблицы
–CP866, Win1251 и т.д.
•Unicode (переменный размер)
–UTF8
•Unicode (фиксированный размер)
–UTF16, UTF32
24.03.2012 |
cppNewb.ru |
5 |
Символ (стандартная библиотека)
• класс-свойств
template<class Ch> struct char_traits;
char_type – тип символов
pos_type – целый тип, определяющий позицию в потоке
24.03.2012 |
cppNewb.ru |
6 |
Строковый класс (std::string)
•стандартная библиотека
•стандарт не определяет конкретный способ хранения строк в памяти
•стандарт допускает реализацию с подсчетом ссылок
24.03.2012 |
cppNewb.ru |
7 |
Шаблонное объявление
template < class Ch,
class Tr = char_traits<Ch>, class Al = allocator<Ch> >
class basic_string;
typedef basic_string<char> string;
24.03.2012 |
cppNewb.ru |
8 |
Создание строки
• пустая строка
пример:
string str();
• инициализация строковым литералом
пример:
string str(“misis”);
• копирование существующей
пример:
string str(strOld);
24.03.2012 |
cppNewb.ru |
9 |
Инициализация строки символом
• невозможна инициализация символом
пример:
//string(‘a’)
• возможна инициализация несколькими экземплярами символа
пример:
string(‘a’, cnt)
24.03.2012 |
cppNewb.ru |
10 |