Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр4(final).doc
Скачиваний:
0
Добавлен:
09.09.2019
Размер:
601.09 Кб
Скачать

Оператор foreach

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

foreach ( тип имя in выражение ) тело_цикла

Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение (в качестве выражения чаще всего применяется имя массива или другой группы данных). В простом или составном операторе, представляющем собой тело цикла, выполняются действия с переменной цикла. Тип переменной должен соответствовать типу элемента массива.

Например, пусть задан массив:

int[] а = {24, 50, 18, 3, 16, -7, 9, -1};

Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом:

foreach (int x in а)

Console.WriteLine(x);

Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные в теле цикла(пример 5).

Листинг 4.5 – пример 5

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace lab4

{

class Program

{

public static void PrintArray(string header, Array arr)

{

Console.WriteLine(header);

foreach (int elem in arr)

Console.Write("\t" + elem);

Console.WriteLine();

}

static void Main(string[] args)

{

Console.WriteLine("Работа с одномерным массивом с использованием цикла foreach\n");

int[] arr = { 3, 12, 5, -9, 8, -4 };

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

int sum = 0, num = 0;

int max = arr[0];

foreach (int elem in arr)

{

if (elem < 0)

{

sum += elem;

num++;

}

if (elem > max)

max = elem;

}

Console.WriteLine("Сумма отрицательных: " + sum);

Console.WriteLine("Кол-во отрицательных: " + num);

Console.WriteLine("Максимальный элемент: " + max);

}

}

}

Рисунок 4.7 – результат выполнения примера 5

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

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

Символы

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

Таблица 4.2 – Основные методы класса System.Char

Метод Описание

Возвращает числовое значение символа, если он является цифрой, и -1 в противном случае

GetNumericValue

Возвращает категорию Unicode-символа1

GetUnicodeCategory

Возвращает true, если символ является управляющим

IsControl

Возвращает true, если символ является десятичной цифрой

IsDigit

Возвращает true, если символ является буквой

IsLetter

Возвращает true, если символ является буквой или цифрой

IsLetterOrDigit

Возвращает true, если символ задан в нижнем регистре

IsLower

Возвращает true, если символ является числом (десятичным или шестнадцатеричным)

IsNumber

Возвращает true, если символ является знаком препинания

IsPunctuation

Возвращает true, если символ является разделителем

IsSeparator

Возвращает true, если символ записан в верхнем регистре

Isllpper

Возвращает true, если символ является пробельным (пробел, перевод строки и возврат каретки)

IsWhiteSpace

Преобразует строку в символ (строка должна состоять из одного символа)

Parse

Преобразует символ в нижний регистр

ToLower

Преобразует символ в верхний регистр

ToUpper

Возвращают символы с максимальным и минимальным кодами (эти символы не имеют видимого представления)

MaxValue, MinValue

Возвращает числовое значение символа, если он является цифрой, и -1 в противном случае

В листинге 4.6 продемонстрировано использование этих методов.

Листинг4.6 – Использование методов класса System.Char

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace lab4

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Использование методов класса System.Char");

try

{

char b = 'B', c = '\x63', d = '\u0032'; //1

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 //2

{

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

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

Console.WriteLine("Введен символ {0}, его код {1}", a, (int)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 != 'q');

}

catch

{

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

return;

}

}

}

}

Результат выполнения:

Рисунок 4.8 – Использование методов класса System.Char

В операторе 1 описаны три символьных переменных. Они инициализируются символьными литералами в различных формах представления. Далее выполняются вывод и преобразование символов.

В цикле 2 анализируется вводимый с клавиатуры символ. Можно вводить и управляющие символы, используя сочетание клавиши Ctrl с латинскими буквами. При вводе использован метод Parse, преобразующий строку, которая должна содержать единственный символ, в символ типа char. Поскольку вводится строка, ввод каждого символа следует завершать нажатием клавиши Enter. Цикл выполняется, пока пользователь не введет символ q.

Вывод символа сопровождается его кодом в десятичном виде1. Для вывода кода используется явное преобразование к целому типу. Явное преобразование из символов в строки и обратно в С# не существует, неявным же образом любой объект, в том числе и символ, может быть преобразован в строку2, например:

string s = 'к' + 'о' + 'т'; // результат - строка "кот"

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