Операции над строковым значением с помощью цикла. Синтаксис C#
Самой распространенной операцией над строковым значением является поиск. Поиск может осуществляется как одного элемента, так и цепочки из элементов. К примеру, зная, что инструкция в программном коде заканчивается на знак «;», можно подсчитать количество инструкций даже если некоторые из них написаны в одну строку. Поиск, цепочек из элементов, позволяют определить стратегию продажи товара. Для этого, в отзывах ищут цепочки из символов «хорошо» или «плохо».
Для таких операций, как это не банально звучит, необходимо получить доступ к массиву элементов значения.
Давайте вспомним, что для доступа к элементу значения строкового типа используется конструкция — имя переменной [индекс элемента], где индекс элемента — целое число, изменяя который, можно получить доступ к любому элементу значения.
Изменение номера индекса — повторяющаяся задача, поэтому применим для этой операции операцию повторения.
Для написания цикла, нам необходимо знать начальное, конечное значение цикла, а также изменение начального значения.
Так как нумерация индексов начинается с нуля, то и начальное значение будет начинаться с нуля.
Конечное значение определим с помощью свойства— Length.Свойство — Length. Свойства, так же, как и методы, вызываются через точку после имени, с той разницей, что в формате вызова метода используются круглые скобки после имени метода, а формат свойства их не использует.
static void Main(string[] args)
{
string text = "Hello!";
int sizeText = text.Length;
Console.WriteLine($"Размер значения: {sizeText} символов");
}
Изменение значения будем осуществлять по нижеприведенному алгоритму:
Представим индекс элемента в виде переменной
В цикле будем изменять значение переменной. Изменяя значение переменной, каждую итерацию, в конструкции — имя переменной [индекс элемента], вместо индекса элемента будет подставляться новое значение.
Напишем программу вывода элементов через пробел переменной text.
static void Main(string[] args)
{
string text = "Hello!";
for(int i=0; i < text.Length; i++)
{
Console.Write(text[i] + " ");
}
}
Здесь,
Внесено изменение в конструкцию — имя переменной [индекс элемента] и представляет собой следующий вид — text[i].
Изменяясь каждую итерацию, переменная «i» будет принимать значение от нуля до пяти. При первой итерации, конструкция text [i], получит от переменной « i » значение в виде числа « 0 » и метод вывода примет следующий вид Console.Write(text[0] + " "); а при последней — Console.Write(text[5] + ",").
Выведем на экран символы значение из предыдущей программы в обратном порядке
static void Main(string[] args)
{
string text = "Hello!";
for (int i = text.Length; i > 0; i--)
{
Console.Write(text[i] + " ");
}
}
При запуске программы произойдет ошибка, указывающая на обращении к несуществующему индексу.
Все дело в свойстве Length. Вернее, в том, что, нумерация индексов начинается с нуля и последний индекс значения будет — пять, а нумерация в свойстве Length, начинается с единицы и заканчивается числом шесть. Так как, начальным значением счетчика установлено значение от свойства Length, то произошло обращение к несуществующему индексу с номером шесть, что и привело к ошибке.
Исправить ошибку достаточно легко. Достаточно уменьшить значение свойства Length на единицу. Еще одной ошибкой в данном коде является конечное значение счетчика определенное операцией «i > 0». Здесь «i» не достигнет числа « 0 » и элемент с таким индексом не будет задействован в цикле.
Исправим обе ошибки
static void Main(string[] args)
{
string text = "Hello!";
for (int i = text.Length - 1; i >= 0; i--)
{
Console.Write(text[i] + " ");
}
}
При написании цикла для обработки всех элементов строкового значения необходимо обратить пристальное внимание на соответствие числового ряда индексов и чисел используемых в счетчике итераций.
Практический пример для подсчета предложений
Зная, что каждое предложение заканчивается на точку, восклицательный или вопросительный знак, организуем перебор строки и, если такой знак встретится, запишем это событие в отдельную переменную.
static void Main(string[] args)
{
string text = "Эрнест Хемингуэй! Старик и море. Жанр. Роман?";
int count = 0;
int i = 0;
while (i < text.Length)
{
if ((text[i] == '.') || (text[i] == '!') || (text[i] == '?'))
{
count++;
}
i++;
}
Console.WriteLine("Количество предложений: " + count);
}
Здесь переменная «i» не только считает количество итераций, но и изменяет каждую итерацию индекс массива символов. Таким образом в цикле просматриваются все символы от первого до последнего. В случае совпадения символа значения с символом сравнения, информация об этом записывается в переменную count.
В заключении.
Для обработки нескольких элементов строкового значения используйте конструкции повторения — циклы. При написании кода обращайте внимание на соответствие диапазона числового ряда подменяемых числовой переменой индексов элементов. Несоответствие диапазонов вызовут либо ошибку, либо не все элементы будут задействованы в обработке.
На этом занятие закончено.
Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru
Удачи в выполнении практических заданий!