- •Лекция 1. Платформа Microsoft .Net Framework 2.0
- •Понятия приложения, проекта, решения
- •Среда разработки Visual Studio .Net
- •Создание первого проекта
- •Компиляция и выполнение программы в среде clr
- •1.2. Рекомендации по выполнению практикума
- •1.3. Рекомендации по самостоятельной работе
- •Лекция 2. Технология объектно-ориентированного программирования
- •Состав языка
- •Типы данных
- •Переменные и константы
- •Организация ввода-вывода данных. Форматирование
- •Вывод данных
- •Ввод данных
- •Практикум
- •Самостоятельная работа
- •Лекция 3. Операции
- •Выражения и преобразование типов
- •Практикум
- •Самостоятельная работа
- •Лекция 4. Операторы языка c#
- •Операторы следования
- •Операторы ветвления
- •Условный оператор if
- •Оператор выбора switch
- •Операторы цикла
- •Цикл с предусловием while
- •Цикл с постусловием do while
- •Цикл с параметром for
- •Вложенные циклы
- •Операторы безусловного перехода
- •Оператор безусловного перехода goto
- •Оператор выхода break
- •Оператор перехода к следующей итерации цикла continue
- •Практикум
- •Самостоятельная работа
- •Лекция 5. Методы: основные понятия
- •Методы: основные понятия. Перегрузка методов. Методы: основные понятия
- •Перегрузка методов
- •Практикум
- •Самостоятельная работа Теоретический материал
- •Практическое задание
- •Лекция 6. Рекурсивные методы
- •Практикум
- •Самостоятельная работа
- •Лекция 7. Обработка исключений
- •Оператор try
- •Операторы checked и unchecked
- •Генерация собственных исключений
- •Полезные совет
- •Практикум
- •Самостоятельная работа Теоретический материал Вычисление конечных сумм и произведений
- •Вычисление бесконечных сумм
- •Практическое задание
- •Лекция 8. Массивы
- •Одномерные массивы
- •Массивы и исключения
- •Массив как параметр
- •Массив как объект
- •Многомерные массивы
- •Ступенчатые массивы
- •Оператор foreach и его использование при работе с массивами
- •Практикум
- •Самостоятельная работа Теоретический материал Вставка и удаление элементов в массивах
- •Практические задания
- •Лекция 9. Символы и строки
- •Символы char
- •Неизменяемые строки string
- •Изменяемые строки
- •Практикум
- •Самостоятельная работа
- •Запуск программы из командной строки
- •Передача параметров в метод Main из командной строки
- •Практические задачи
- •Лекция 10. Регулярные выражения
- •Метасимволы в регулярных выражениях
- •Поиск в тексте по шаблону
- •Редактирование текста
- •Практикум
- •Самостоятельная работа Теоретический материал
- •Практическое задание
- •Лекция 11. Организация с#-системы ввода-вывода
- •Байтовый поток
- •Символьный поток
- •Двоичные потоки
- •Перенаправление стандартных потоков
- •Практикум
- •Самостоятельная работа
- •Лекция 12. Работа с файловой системой
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo Работа с файловой системой
- •Работа с каталогами Абстрактный класс FileSystemInfo
- •Класс DirectoryInfo
- •Класс Directory
- •Работа с файлами Класс Filelnfo
- •Класс File
- •12.2. Практикум
- •12.3. Самостоятельная работа
- •Данные: поля и константы
- •Конструкторы
- •Конструкторы экземпляра
- •Конструкторы класса
- •Свойства
- •"Один класс - один файл",
- •13.2. Практикум
- •13.3. Самостоятельная работа
- •13.4. Классы: деструкторы, индексаторы, операции класса, операции преобразования типов Деструкторы
- •Индексаторы
- •Операции класса
- •Унарные операции
- •Бинарные операции
- •Операции преобразования типов
- •13.5. Практикум (продолжение практикума 13)
- •13.6. Самостоятельная работа
- •Лекция 14. Иерархия классов
- •14.1 Иерархия
- •Наследование
- •Использование защищенного доступа
- •Наследование конструкторов
- •Многоуровневая иерархия
- •Переменные базового класса и производного класса
- •Виртуальные методы
- •Абстрактные методы и классы
- •Запрет наследования
- •14.2. Практикум
- •14.3. Самостоятельная работа
- •Лекция 15. Интерфейсы и структуры
- •15.1. Пользовательские и стандартные интерфейсы. Структуры Интерфейсы
- •Стандартные интерфейсы .Net
- •Структуры
- •15.2. Практикум
- •15.3. Самостоятельная работа Теоретический материал
- •Задание
- •Лекция 16. Коллекции
- •16.1. Классификация коллекций. Коллекции общего назначения: стек. Очередь, динамический массив, хеш-таблица Коллекции
- •Коллекции общего назначения
- •Класс Stack
- •Класс Queue
- •Класс ArrayList
- •Класс Hashtable
- •16.2. Практикум
- •16.3. Самостоятельная работа
- •Дополнения Дополнение. Операции с#
- •Дополнение. Математические функции языка с#
- •Литература
Изменяемые строки
Чтобы создать строку, которую можно изменять, в С# предусмотрен класс StringBuilder, определенный в пространстве имен System.Text. Объекты этого класса всегда объявляются с явным вызовом конструктора класса (через операцию new) . Примеры создания изменяемых строк:
StringBuilder a =new StringBuilder(); //создание пустой строки, размер по умолчанию 16 символов
//инициализация строки и выделение необходимой памяти
StringBuilder b = new StringBuilder("abcd");
//создание пустой строки и выделение памяти под 100 символов
StringBuilder с = new StringBuilder(100);
//инициализация строки и выделение памяти под 100 символов
StringBuilder d = new StringBuilder("abcd", 100);
//инициализация подстрокой "bcd", и выделение памяти под 100 символов
StringBuilder d = new StringBuilder("abcd", 1, 3,100);
Основные элементы класса приведены в таблице:
Название |
Вид |
Описание |
Append |
Экземплярный метод |
Добавление данных в конец строки. Разные варианты метода позволяют добавлять в строку величины любых встроенных типов, массивы символов, строки и подстроки string. |
AppendFormat |
Экземплярный метод |
Добавление форматированной строки в конец строки |
Capacity |
свойство |
Получение и установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, то генерируется исключение ArgumentOutOfRangeException |
Insert |
Экземплярный метод |
Вставка подстроки в заданную позицию |
Length |
изменяемое свойство |
Возвращает длину строки. Присвоение ему значения 0 сбрасывает содержимое и очищает строку |
MaxCapacity |
неизменное свойство |
Возвращает наибольшее количество символов, которое может быть размещено в строке |
Remove |
Экземплярный метод |
Удаление подстроки из заданной позиции |
Replace |
Экземплярный метод |
Замена всех вхождений заданной подстроки или символа новой подстрокой или символом |
ToString |
Экземплярный метод |
Преобразование в строку типа string |
Chars |
изменяемое свойство |
Возвращает из массива или устанавливает в массиве символ с заданным индексом. Вместо него можно пользоваться квадратными скобками [] |
Equals |
Экземплярный метод |
Возвращает true, только если объекты имеют одну и ту же длину и состоят из одних и тех же символов |
CopyTo |
Экземплярный метод |
Копирует подмножество символов строки в массив char |
Как видим, методы класса StringBuilder менее развиты, чем методы класса String, но они позволяют более эффективно использовать память за счет работы с изменяемыми строками. Рассмотрим примеры использования данных методов.
static void Main()
{
try
{
StringBuilder str=new StringBuilder("Площадь");
PrintString(str);
str.Append(" треугольника равна");
PrintString(str);
str.AppendFormat(" {0:f2} см ", 123.456);
PrintString(str);
str.Insert(8, "данного ");
PrintString(str);
str.Remove(7, 21);
PrintString(str);
str.Replace("а", "о");
PrintString(str);
StringBuilder str1=new StringBuilder(Console.ReadLine());
StringBuilder str2=new StringBuilder(Console.ReadLine());
Console.WriteLine(str1.Equals(str2));
}
catch
{
Console.WriteLine("Вознико исключение");
}
}
static void PrintString(StringBuilder a)
{
Console.WriteLine("Строка: "+a);
Console.WriteLine("Текущая длина строки " +a.Length);
Console.WriteLine("Объем буфера "+a.Capacity);
Console.WriteLine("Максимальный объем буфера "+a.MaxCapacity);
Console.WriteLine();
}
Задание. Самостоятельно изучите метод CopyTo.
С изменяемой строкой можно работать не только как с объектом, но как с массивом символов:
static void Main()
{
StringBuilder a = new StringBuilder("2*3=3*2");
Console.WriteLine(a);
int k=0;
for (int i = 0; i < a.Length; ++i )
if (char.IsDigit(a[i])) k+=int.Parse(a[i].ToString());
Console.WriteLine(k);
}
На практике часто комбинируют работу с изменяемыми и неизменяемыми строками. Однако если необходимо изменять строку, то в этом случае используют StringBuilder.
Пример. Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Вывести все слова сообщения, которые начинаются и заканчиваются на одну и ту же букву.
static void Main()
{
Console.WriteLine("Введите строку: ");
StringBuilder a = new StringBuilder(Console.ReadLine());
Console.WriteLine("Исходная строка: "+a);
for (int i=0; i<a.Length;)
if (char.IsPunctuation(a[i])) a.Remove(i,1);
else ++i;
string str=a.ToString();
string []s=str.Split(' ');
Console.WriteLine("Искомые слова: ");
for (int i=0; i<s.Length; ++i)
if (s[i][0]==s[i][s.Length-1]) Console.WriteLine(s[i]);
}
Задание. Измените программу так, чтобы она корректно работала и для случая, когда в исходной строке встречаются лишние пробелы.