Скачиваний:
65
Добавлен:
24.03.2015
Размер:
269.31 Кб
Скачать

8.7. Применение строк в переключателях

Мы уже упоминали, что объекты класса string (и ссылки на них) могут использоваться в метках переключателя и служить значением переключающего выражения. Для иллюстрации этих возможностей рассмотрим схему решения такой задачи: "Ввести фамилию человека (например, служащего компании) и вывести имеющиеся сведения о нём". Характер этих сведений и конкретные сведения нам не важны - покажем общую схему решения подобных задач с использованием переключателя и строк.

Console.Write("Введите фамилию: ");

string name = Console.ReadLine();

switch (name)

{

case "Сергеев": Console.WriteLine("Фрол Петрович");

// ...Вывод данных о Сергееве ...

break;

case "Туров":

//...Вывод данных о Турове ...

break;

default:

Console.Write("Нет сведений");

break;

}

8.8. Массивы строк

Как любые объекты, строки можно объединять в массивы. Хотя внимательный читатель заметит, что в массив помещаются не строки, а только ссылки на них, но при использовании массивов ссылок на строки не требуются никакие специальные операции для организации обращения к собственно строкам через ссылки на них. Поэтому в литературе, посвященной языку С#, зачастую говорят просто о массивах строк. В следующей программе создаётся массив ссылок на строки, по умолчанию инициализированный пустыми строками. Затем в цикле элементам массива (ссылкам) присваиваются значения ссылок на объекты-строки разной длины. Далее к массиву применяется оператор перебора контейнеров foreach, и строки выводятся на консоль.

// 08_01.cs - массивы строк

string [] stAr = new string[4];

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

stAr[i] = new string('*', i + 1);

foreach (string rs in stAr)

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

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

* ** *** ****

В программе создан массив из четырёх пустых строк. Он представлен ссылкой stAr. Обратите внимание, что для создания объектов, адресуемых элементами массива, применяется конструктор с прототипом string (char, int); Этот конструктор создаёт строку в виде последовательности одинаковых символов, количество которых определяет второй параметр. (Первый параметр позволяет задать повторяемый символ.) Итерационная переменная цикла foreach имеет тип string, так как просматриваемым контейнером служит массив типа string[ ].

Для иллюстрации применения методов Split(), Join(), рассмотрим следующую задачу. Пусть значением строки является предложение, слова которого разделены пробелами. Требуется заменить каждый пробел последовательностью символов "-:-". Следующая программа решает сформулированную задачу.

// 08_02.cs - декомпозиция и объединение строк.

string sent = "De gustibus non est disputandum"; // о вкусах не спорят

string[] words; //ссылка на массив строк

words = sent.Split(' ');

Console.WriteLine("word.Length = " + words.Length);

foreach (string st in words)

Console.Write("{0}\t", st);

sent = string.Join("-:-", words);

Console.WriteLine("\n" + sent);

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

word. Length = 5

De gustibus non est disputandum

De-:-gustibus-:-non-:-est-:-disputandum

В строке, связанной со ссылкой sent, помещены слова, разделённые пробелами. Определена ссылка words на массив строк (объектов класса string). Обращение sent.SplitC ') "разбивает" строку, адресованную ссылкой sent, на фрагменты. Признак разбиения - символ пробел ' ', использованный в качестве аргумента. Из выделенных фрагментов формируется массив (объект класса string[]), и ссылка на него присваивается переменной words.

Выражение word.Length равно длине (количеству элементов) сформированного массива. Напомним, что Length - свойство класса массивов string[], унаследованное от базового класса Array.

Оператор foreach перебирает элементы массива words, и итерационная переменная st последовательно принимает значения каждого из них. (Напомним, что особенность итерационной переменной состоит в том, что она позволяет только получать, но не позволяет изменять значения перебираемых элементов.) В теле цикла foreach один оператор - обращение к статическому методу Write() класса Console. Его выполнение обеспечивает вывод значений элементов массива (строк). Эскейп-последовательность '\t' в поле подстановки разделяет табуляцией выводимые слова.

Статический метод Join() предназначен для выполнения действий в некотором смысле обратных действиям метода Split(). Обращение string Join("-:-", words) объединяет (конкатенирует) строки массива, представленного ссылкой words, то есть соединяет в одну строку слова исходного предложения. Между словами вставляется строка, использованная в качестве первого аргумента метода Join(). Тем самым каждый пробел между словами исходной строки заменяется строкой "-:-".

Соседние файлы в папке Lekc_C#