Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

8.6. Строка как контейне

р

Как мы уже знаем, оператор foreach "оператор: foreach" предназначен для

последовательного перебора всех элементов некоторого контейнера. Если в

качестве контейнера выступает массив, например, с элементами типа long, то для

просмотра значений всех его элементов можно использовать цикл с заголовком

foreach (long cell in массив)

В этом цикле итерационная переменная cell имеет тот же тип, что и элементы

массива и последовательно принимает значения его элементов.

Если нужно применить такой же цикл для перебора элементов объекта типа

string, то используется итерационная переменная типа char. В качестве контейнера

выступает строковый литерал, либо объект класса string (либо ссылка на такой

объект). Пример со строковым литералом:

foreach (char numb in "0123")

Console.Write("\t"+numb+"->"+(int)numb);

Результат:

0–>48

1->49

2->50

3->51

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

Мы уже упоминали, что объекты класса string (и ссылки на них) могут

использоваться в метках переключателя "метка:метка переключателя" и служить

значением переключающего выражения. Для иллюстрации этих возможностей

рассмотрим схему решения такой задачи: "Ввести фамилию человека (например,

служащего компании) и вывести имеющиеся сведения о нём". Характер этих

сведений и конкретные сведения нам не важны – покажем общую схему решения

подобных задач с использованием переключателя и строк.

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

string name= Console.ReadLine();

swich(name) {

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

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

break

;

case "Туров":

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

break;

....

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

}

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

Как

любые

объекты,

строки

можно

объединять

в

массивы.

Хотя

внимательный читатель заметит, что в массив помещаются не строки, а только

ссылки на них, но при использовании массивов ссылок на строки "массив:массив

ссылок на строки" не требуются никакие специальные операции для организации

обращения к собственно строкам через ссылки на них. Поэтому в литературе,

посвящённой языку C#, зачастую говорят просто о массивах строк. В следующей

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

пустыми строками. Затем в цикле элементам массива (ссылкам) присваиваются

значения ссылок на объекты-строки разной длины. Далее к массиву применяется

оператор перебора контейнеров foreach, и строки выводятся на консоль.

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

using System;

class Program {

static void Main() {

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() "метод: Split()" , Join() "метод:

Join()" , рассмотрим следующую задачу. Пусть значением строки является

предложение, слова которого разделены пробелами. Требуется заменить каждый

пробел последовательностью символов "-:-". Следующая программа решает

сформулированную задачу.

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

using System;

class Program

{

static void Main()

{

string sent = "De gustibus non est disputandum";

// о вкусах не спорят

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

words = sent.Split(' ');

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

foreach (string st in words)

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

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

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

}

}

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

words.Length = 5

De gustibus non est disputandum

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

В строке, связанной со ссылкой sent, помещены слова, разделённые пробелами.

Определена ссылка words на массив строк (объектов класса string). Обращение

sent.Split(' ') "разбивает" строку, адресованную ссылкой sent, на фрагменты.

Признак разбиения – символ пробел ' ', использованный в качестве аргумента. Из

выделенных фрагментов формируется массив (объект класса string[ ]), и ссылка на

него присваивается переменной words.

Выражение

words.Length

равно

длине

( количеству

элементов )

сформированного массива. Напомним, что Length – свойство класса массивов

string[ ], унаследованное от базового класса Array.

Оператор foreach перебирает элементы массива words, и итерационная

переменная st последовательно принимает значения каждого из них. (Напомним, что

особенность итерационной переменной состоит в том, что она позволяет только

получать, но не позволяет изменять значения перебираемых элементов.) В теле

цикла foreach один оператор – обращение к статическому методу Write() класса

Console. Его выполнение обеспечивает вывод значений элементов массива (строк).

Эскейп-последовательность '\t' в поле подстановки разделяет табуляцией выводимые

слова.

Статический метод Join() предназначен для выполнения действий в некотором

смысле обратных действиям метода Split(). Обращение string.Join("-:-", words)

объединяет (конкатенирует) строки массива, представленного ссылкой words, то

есть соединяет в одну строку слова исходного предложения. Между словами

вставляется строка, использованная в качестве первого аргумента метода Join(). Тем

самым каждый пробел между словами исходной строки заменяется строкой "-:-".

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