- •Глава 9. Многомерные массивы
- •9.1 Прямоугольные массивы
- •9.1.1 Объявления и инициализация
- •9.1.2 Примеры
- •9.2 Ступенчатые массивы
- •9.2.1 Объявления и инициализация
- •9.2.2 Примеры
- •9.3 Оператор цикла с перебором foreach
- •9.4 Массивы с числом размерностей больше двух
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 10. Исключительные ситуации
- •10.1 Основные понятия
- •10.2 Механизм обработки исключений
- •10.3 Примеры обработки исключений
- •10.4 Оператор throw
- •10.5 Дополнительные сведения
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 11. Обработка текстовой информации
- •11.1 Символьный тип char
- •11.2 Массив символов
- •11.3 Тип String
- •11.4 Класс StringBuilder
- •11.5 Форматирование строк
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
11.2 Массив символов
Некоторые алгоритмы обработки символьной информации могут оперировать массивом символов, а значит, им доступны возможности класса Array, приведенные в главе 8. Рассмотрим это.
Пример 1. Дана строка символов s. Напечатать в алфавитном порядке: какие строчные русские буквы встречаются в этой строке.
Одним из вариантов решения данной задачи может быть такой. Опишем дополнительную строку p, где будет представлен весь русский алфавит строчными буквами, как массив символов.
Данный массив, также как и массив символов s, получен в программе (лист.1) путем преобразования строки в массив методомToCharArrayклассаSystem.String (табл. 11.2).Естественно длина такого массива будет определяться числом33. Анализ введенного массиваsв этом случае может быть организован с помощью двух вложенных циклов.
В предложенной программе внешний цикл перебирает посимвольно буквы русского алфавита из массива р, и для его построения используется цикл с параметром. Конечное значение параметра этого цикла вычисляется в заголовке цикла с помощью функцииLength(p), хотя можно было просто записать его значение явно, равное33.
Внутренний цикл –это цикл с постусловием. Параметром его является переменнаяj, определяющая индекс анализируемого элемента массиваsи увеличивающая свое значение в цикле с шагом+1, тем самым, обеспечивая просмотр всех его элементов (от первого до последнего).
Если найден элемент массива s, совпадающий с рассматриваемой буквой алфавита, определенной во внешнем цикле, то выполняются печать этого элемента и принудительное завершение внутреннего цикла процедуройbreak. Это исключает дублирование символов в массивеs.
После прерывания выполнения внутреннего цикла внешний цикл начинает работать со следующим элементом массива-алфавита, и для него все повторяется сначала.
Листинг 1
using System;
namespace ConsoleApplication3
{ class Program
{ static void Main(string[] args)
{ char[] p = "абвгдежзийклмнопрстуфхцчшщъыьэюя".ToCharArray();
Console.WriteLine();
char[] s = "мама мыла раму".ToCharArray();
for (int i = 0; i < p.Length; ++i)
{ int j = 0;
do
{ if (p[i] == s[j])
{ Console.Write(" " + s[j]);
break;
}
j++;
}
while (j < s.Length);
}
Console.Read();
}
}
}
Результат работы программы:
Далее приведен пример, в котором при обработке массива символов использованы методы класса System.Char(лист. 2).
Пример 2. Дан массив символов. Требуется написать программу, распознающую некоторые категории символов.
Листинг 2
using System;
namespace ConsoleApplication1
{ class Program
{ static void Main(string[] args)
{ char q;
Console.WriteLine();
char[] s = "Столов 25".ToCharArray();
int j = 0;
do
{q=s[j];
if (char.IsLetter(q)) Console.Write("Буква "+q);
if (char.IsUpper(q)) Console.WriteLine(" Верхний рег.");
if (char.IsLower(q)) Console.WriteLine(" Нижний рег.");
if (char.IsSeparator(q)) Console.WriteLine("Разделитель");
if (char.IsNumber(q)) Console.WriteLine("Число "+q);
j++;
}
while (j < s.Length); }
}
}
Результат работы программы:
В данной программе рассматривается массив символов s. Для определения категории каждого символа массива организован цикл с постусловием, в котором проводится проверка, не требующая дополнительных пояснений, и вывод информации.