Оператор 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; просмотров: 530;