Более эффективная работа со строками



 

Строки типа 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!