Оператор foreach и его использование при работе с массивами

Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных, в том числе и в массиве. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять перебор по индексу – мы просто указываем на необходимость перебрать все элементы группы. Синтаксис оператора:

 

foreach (<тип> <имя> in <группа>) <тело цикла>

 

где имя определяет локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из указанной группы, а тип соответствует базовому типу элементов группы.

Ограничением оператора foreach является то, что с его помощью можно только просматривать значения элементов в группе данных, но нельзя их изменять.

Рассмотрим несколько примеров использования оператора foreach:

1) для работы с одномерными массивами:

 

static void PrintArray(string a, int [] mas)

{

Console.WriteLine(a);

foreach (int x in mas)Console.Write("{0} ", x);

Console.WriteLine();

}

 

2) для работы с двумерными массивами:

 

static int Sum (int [,] mas)

{

int s=0;

foreach (int x in mas) s += x;

return s;

}

 

3) для работы со ступенчатыми массивами:

 

static void PrintArray3(string a, int[][] mas)

{

Console.WriteLine(a);

for (int i = 0; i < mas.Length; i++)

{

foreach (int x in mas[i]) Console.Write("{0} ", x);

Console.WriteLine();

}

}

 

Символы и строки

Обработка текстовой информации является одной из самых распространенных задач современного программировании. С# предоставляет для ее решения широкий набор средств: символы char, неизменяемые строки string, изменяемые строки StringBuider и регулярные выражения Regex. В данном разделе мы рассмотрим работу с символами, неизменяемыми и изменяемыми строками.

 

Символы char

Символьный тип char предназначен для хранения символа в кодировке Unicode. Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Сhar библиотеки .Net из пространства имен System. В этом классе определены статические методы, позволяющие задавать вид и категорию символа, а также преобразовывать символ в верхний или нижний регистр, в число. Рассмотрим основные методы:

 

Метод Описание
GetNumericValue Возвращает числовое значение символа, если он является цифрой, и -1 в противном случае.
GetUnicodeCategory Возвращает категорию Unicode-символа. В Unicode символы разделены на категории, например цифры (DecimalDigitNumber), римские цифры (LetterNumber), разделители строк (LineSeparator), буквы в нижнем регистре (LowercaseLetter) и т.д.
IsControl Возвращает true, если символ является управляющим.
IsDigit Возвращает true, если символ является десятичной цифрой.
IsLetter Возвращает true, если символ является буквой.
IsLetterOrDigit Возвращает true, если символ является буквой или десятичной цифрой.
IsLower Возвращает true, если символ задан в нижнем регистре.
IsNumber Возвращает true, если символ является числом (десятичным или шестнадцатеричным).
IsPunctuation Возвращает true, если символ является знаком препинания.
IsSeparator Возвращает true, если символ является разделителем.
IsUpper Возвращает true, если символ задан в нижнем регистре.
IsWhiteSpace Возвращает true, если символ является пробельным (пробел, перевод строки, возврат каретки).
Parse Преобразует строку в символ (строка должна состоять из одного символа).
ToLower Преобразует символ в нижний регистр
ToUpper Преобразует символ в верхний регистр

 

В следующем примере рассмотрим применение данных методов:

 

static void Main()

{

try

{

char b = 'B', c = '\x64', d = '\uffff';

Console.WriteLine("{0}, {1}, {2}", b, c, d);

Console.WriteLine("{0}, {1}, {2}", char.ToLower(b), char.ToUpper(c), char.GetNumericValue(d));

char a;

do //цикл выполнятеся до тех пор, пока не ввели символ e

{

Console.WriteLine("Введите символ: ");

a = char.Parse(Console.ReadLine());

Console.WriteLine("Введен символ {0}, его код {1}, его категория {2}", a, (int)a, char.GetUnicodeCategory(a));

if (char.IsLetter(a)) Console.WriteLine("Буква");

if (char.IsUpper(a)) Console.WriteLine("Верхний регистр");

if (char.IsLower(a)) Console.WriteLine("Нижний регистр");

if (char.IsControl(a)) Console.WriteLine("Управляющий символ");

if (char.IsNumber(a)) Console.WriteLine("Число");

if (char.IsPunctuation(a)) Console.WriteLine("Разделитель");

} while (a != 'e');

}

catch

{

Console.WriteLine("Возникло исключение");

}

}

 

Используя символьный тип можно оргранизовать массив символов и работать с ним на основе базового класса Array:

 

static void Main()

{

char[] a ={ 'm', 'a', 'Х', 'i', 'M', 'u', 'S' , '!', '!', '!' };

char [] b="кол около колокола".ToCharArray(); //преобразование строки в массив символов

PrintArray("Исходный массив а:", a);

for (int x=0;x<a.Length; x++)

if (char.IsLower(a[x])) a[x]=char.ToUpper(a[x]);

PrintArray("Измененный массив а:", a);

PrintArray("Исходный массив b:", b);

Array.Reverse(b);

PrintArray("Измененный массив b:", b);

}

 

static void PrintArray(string line, Array a)

{

Console.WriteLine(line);

foreach( object x in a) Console.Write(x);

Console.WriteLine('\n');

}

 

Задание. Измените программу так, чтобы в ней подсчитывалось количество знаков пунктуации в массиве a.








Дата добавления: 2017-06-02; просмотров: 473;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.