Более эффективная работа со строками
Строки типа string представляют собой неизменяемые объекты: после того, как строка инициализирована, изменить ее уже нельзя. Рас-смотрим для примера следующий код:
53
string s = "Hello, ";
s += "world!";
Здесь компилятор создает в памяти строковый объект и инициали-зирует его строкой «Hello, », а затем создает другой строковый объект
В инициализирует его значением первого объекта и новой строкой «world!», а затем заменяет значение переменной s на новый объект. В результате строка s содержит именно то, что хотел программист, од-нако в памяти остается и изначальный объект со строкой «Hello, ». Ко-нечно, со временем сборщик мусора уничтожит этот бесхозный объект, однако если в программе идет интенсивная работа со строками, то таких бесхозных объектов может оказаться очень много. Как правило, это не-гативно сказывается на производительности программы и объеме по-требляемой ею памяти.
Чтобы компилятор не создавал каждый раз новый строковый объ-ект, разработчики языка C# ввели другой строковый класс: StringBuilder. Приведенный выше пример с использованием этого класса будет выглядеть следующим образом:
StringBuilder s = new StringBuilder("Hello, "); s.Append("world!");
Конечно, визуально этот код выглядит более сложным, зато при ак-тивном использовании строк в программе он будет гораздо эффектив-нее. Помимо добавления строки к существующему объекту (Append) класс StringBuilder имеет еще ряд полезных методов:
|
|
в Insert: вставляет указанный текст в нужную позицию исходной строки
в Remove: удаляет часть строки
в Replace: заменяет указанный текст в строке на другой.
Если нужно преобразовать объект StringBuilder в обычную стро-
ку, то для этого можно использовать метод ToString():
StringBuilder s = new StringBuilder("Яблоко"); string a = s.ToString();
Элемент управления ListBox
Элемент управления ListBox представляет собой список, элементы которого выбираются при помощи клавиатуры или мыши. Список эле-ментов задается свойством Items. Items – это элемент, который имеет свои свойства и свои методы. Методы Add, RemoveAt и Insert использу-ются для добавления, удаления и вставки элементов.
54
Объект Items хранит объекты, находящиеся в списке. Объект может быть любым классом – данные класса преобразуются для отображения
· строковое представление методом ToString(). В нашем случае в качест-ве объекта будут выступать строки. Однако, поскольку объект Items хра-нит объекты, приведенные к типу object, перед использованием необхо-димо привести их обратно к изначальному типу, в нашем случае string:
string a = (string)listBox1.Items[0];
Для определения номера выделенного элемента используется свой-
|
|
ство SelectedIndex.
Порядок выполнения индивидуального задания
· а д а н и е : Написать программу подсчета числа слов в произ-вольной строке. В качестве разделителя может быть любое число про-белов. Для ввода строк использовать ListBox. Строки вводятся на этапе проектирования формы, используя окно свойств. Вывод результата ор-ганизовать в метку Label.
Панель диалога будет иметь вид:
Рис. 6.1. Окно программы обработки строк
Текст обработчика нажатия кнопки «Пуск» приведен ниже.
private void button1_Click(object sender, EventArgs e)
{
· Получаем номер выделенной строки int index = listBox1.SelectedIndex;
55
З Считываем строку в переменную str
string str = (string)listBox1.Items[index];
в Узнаем количество символов в строке int len = str.Length;
в Считаем, что количество пробелов равно 0 int count = 0;
в Устанавливаем счетчик символов в 0
int i = 0;
В Организуем цикл перебора всех символов в строке while (i < len)
{
Если нашли пробел, то увеличиваем
счетчик пробелов на 1
if (str[i] == ' ')
count++;
i++;
}
label1.Text = "Количество пробелов = " + count.ToString();
}
Индивидуальные задания
Во всех заданиях исходные данные вводить с помощью ListBox. Строки вводятся на этапе проектирования формы, используя окно свойств. Вывод результата организовать в метку Label.
|
|
Дана строка, состоящая из групп нулей и единиц. Посчитать количество нулей и единиц.
Посчитать в строке количество слов.
Найти количество знаков препинания в исходной строке.
Дана строка символов. Вывести на экран цифры, содержащиеся
// строке.
Дана строка символов. Сформировать новую строку, в которую включить все символы исходной строки, стоящие на четных местах. При этом должен быть обратный порядок следования символов по от-ношения к исходной строке.
Сформировать и вывести две новых строки на основе входной строки символов. В первую строку включить все символы, стоящие на четных местах, во вторую – символы, стоящие на нечетных местах
// исходной строке.
Дана строка символов, состоящая из произвольных десятич-ных цифр, разделенных пробелами. Вывести количество четных чисел
//этой строке.
Дана строка символов. Вывести на экран количество строчных русских букв, входящих в эту строку.
56
Сформировать и вывести три новых строки на основе входной строки символов. В первую строку включить все цифры, во вторую – все знаки препинания: точки, запятые, двоеточия, точки с запятой, вос-клицательные и вопросительные знаки, в третью строку – все остальные символы. Например, входная строка содержит: «выходные дни: 1, 2 ян-варя, 8 марта, 1 мая, 9 мая!», после обработки первая строка будет со-держать: «12819», вторая строка: «:,,,!», третья строка: «выходные дни января марта мая мая».
|
|
Дана строка символов. Вывести на экран только строчные рус-ские буквы, входящие в эту строку.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. В каждом слове заме-нить первую букву на прописную.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Удалить первую бук-ву в каждом слове.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Поменять местами i-
//j-ю буквы. Для ввода i и j на форме добавить свои поля ввода.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Заменить все буквы ла-тинского алфавита на знак «+».
Дана строка символов, содержащая некоторый текст на рус-ском языке. Заменить все большие буквы «А» на символ «*».
Дана строка символов, содержащая некоторый текст. Разрабо-тать программу, которая определяет, является ли данный текст палин-дромом, т. е. читается ли он слева направо так же, как и справа налево (например, «А роза упала на лапу Азора»).
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Сформировать новую строку, состоящую из чисел длин слов в исходной строке.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Поменять местами первую и последнюю буквы каждого слова.
Поменять местами первое и второе слово в исходной строке.
Сформировать новую строку, где поменять местами первое
в последнее слово из исходной строки.
57
ЛАБОРАТОРНАЯ РАБОТА № 7.
ОДНОМЕРНЫЕ МАССИВЫ
Цель лабораторной работы:Изучить способы получения случай-ных чисел. Написать программу для работы с одномерными массивами.
Работа с массивами
Массив –набор элементов одного и того же типа,объединенныхобщим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования. Однако С#-массивы имеют существенные отличия: они относятся к ссылоч-ным типам данных, более того – реализованы как объекты. Фактически имя массива является ссылкой на область кучи (динамической памяти),
3. которой последовательно размещается набор элементов определен-ного типа. Выделение памяти под элементы происходит на этапе ини-циализации массива. А за освобождением памяти следит система сбор-ки мусора – неиспользуемые массивы автоматически утилизируются данной системой.
Рассмотрим в данной лабораторной работе одномерные массивы. Одномерный массив –это фиксированное количество элементов одногои того же типа, объединенных общим именем, где каждый элемент име-ет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Одномерный массив в С# реализуется как объект, поэтому его соз-дание представляет собой двухступенчатый процесс. Сначала объявля-ется ссылочная переменная на массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной перемен-ной присваивается адрес нулевого элемента в массиве. Базовый тип оп-ределяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяет размер массива.
x общем случае процесс объявления переменной типа массив и выделение необходимого объема памяти может быть разделен. Кроме того, на этапе объявления массива можно произвести его инициализа-цию. Поэтому для объявления одномерного массива может использо-ваться одна из следующих форм записи:
тип[] имя_массива;
58
xi этом случае описывается ссылка на одномерный массив, которая
4. дальнейшем может быть использована для адресации на уже сущест-вующий массив. Размер массива при таком объявлении не задается. Пример, в котором объявляется массив целых чисел с именем a:
int[] a;
Другая форма объявления массива включает и его инициализацию указанным количеством элементов:
тип[] имя_массива = new тип[размер];
6. этом случае объявляется одномерный массив указанного типа и выделяется память под указанное количество элементов. Адрес данной области памяти записывается в ссылочную переменную. Элементы мас-сива инициализируются значениями, которые по умолчанию приняты для данного типа: массивы числовых типов инициализируются нулями, строковые переменные – пустыми строками, символы – пробелами, объ-екты ссылочных типов – значением null. Пример такого объявления:
int[] a = new int[10];
Здесь выделяется память под 10 элементов типа int.
Наконец, третья форма записи дает возможность сразу инициали-зировать массив конкретными значениями:
тип[] имя_массива = {список инициализации};
При такой записи выделяется память под одномерный массив, размер-ность которого соответствует количеству элементов в списке инициализа-ции. Адрес этой области памяти записан в ссылочную переменную. Значе-ние элементов массива соответствует списку инициализации. Пример:
int[] a = { 0, 1, 2, 3 };
7. данном случае будет создан массив a, состоящий из четырех эле-ментов, и каждый элемент будет инициализирован очередным значени-ем из списка.
Обращение к элементам массива происходит с помощью индекса: для этого нужно указать имя массива и в квадратных скобках – его но-мер. Например: a[0], b[10], c[i]. Следует помнить, что нумерация эле-ментов начинается с нуля!
59
Так как массив представляет собой набор элементов, объединен-ных общим именем, то обработка массива обычно производится в цик-ле. Например:
int[] myArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (int i = 0; i < 10; i++)
MessageBox.Show(myArray[i]);
Случайные числа
Одним из способов инициализации массива является задание эле-ментов через случайные числа. Для работы со случайными числами используют класс Random. Метод Random.Next создает случайное число
8. диапазоне значений от нуля до максимального значения типа int (его можно узнать с помощью свойства Int32.MaxValue). Для создания слу-чайного числа в диапазоне от нуля до какого-либо другого положи-тельного числа используется перегрузка метода Random.Next(Int32) – единственный параметр метода указывает верхнюю границу диапазо-на, сама граница в диапазон не включается. Для создания случайного числа в другом диапазоне используется перегрузка метода Random.Next(Int32, Int32) – первый аргумент задает нижнюю грани-цу диапазона, а второй – верхнюю.
Дата добавления: 2020-04-08; просмотров: 1117; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!