Из этой лекции вы узнаете о ссылочном типе данных — string и примитивном — char.
Переменные с ссылочным типом данных string — это переменные, предназначенные для хранения значений в виде строк. Строкой считается любое значение, с форматом представления в виде любых символов заключенных между двойными кавычками, даже если это один символ.
Объявление и инициализация переменной с типом данных string ничем ни отличается от тех же операций с другими типами данных.
Так выглядит инициализация переменной с строковым значением
static void Main(string[] args)
{
string text = "Bill";
}
В отличии от числовых значений, строковое значение, не является набором цифр, и поэтому не может хранится как числовое значение.
Для хранения строгого значения используется следующая схема. Строковое значение разбивается на отдельные символы, в том числе, знаки препинания, пробелы и т.д., и каждый символ преобразуется в число. После преобразования получается массив из чисел, которые записываются в специальную область памяти — куча. Соответствие символа и его десятичного, числового представления указаны в таблице символов ASCII(1 байт) или UNICODE(2 байта).
Для доступа к строковому значению, в стеке, создается объект-ссылка с именем, в котором указано, где, в куче, находятся символы.
Ссылка приведена для визуального оформления
Само хранение строкового значения можно представить как блок из мини переменных, где каждая мини переменная, в виде числа, хранит один символ. Такая мини переменная называется — элемент строкового значения. Доступ к элементу осуществляется по индексу, который представляет собой порядковый номер элемента в значении. Нумерация индексов начинается с нуля.
Строковое значение «Bill», в памяти компьютера будет представлено следующим набором числовых значений — 66 105 108 108.
Для доступа к отдельному элементу указывается имя значения и соответствующий индекс, в формате записи — имя переменной [индекс элемента]
static void Main(string[] args)
{
string text = "Bill";
Console.WriteLine($"Имя строка - {text[0]},{text[1]},{text[2]},{text[3]}");
}
Здесь, для вывода строки применена интерполяции.
Элемент строкового значения хранится в виде значения с символьным типом данных — char. Таким образом, значение с типом данных string — это массив элементов с типом данных char.
static void Main(string[] args)
{
string text = "Bill";
Console.WriteLine("Тип данных: " + text[0].GetTypeCode());
}
Здесь, метод GetTypeCode(), указывает на тип данных значения, хранимого в элементе с индексом 0.
Символьный тип —char, является очень интересным типом данных. Значения этого типа данных хранится как числовое значение, но на экран выводится — его графическое представление. Другими словами, для компьютера значение типа данных —char, является числом, но пользователь на экране видит символ. Это некий мостик, между строковыми и числовыми значениями.
Значения с типом данных char относятся к примитивным типам данных и хранятся в стеке. Формат записи — единственный символ, обрамленный одинарными кавычками. Размер выделяемой памяти составляет один или два байта.
static void Main(string[] args)
{
char symbolA = 'A';
}
Соответствие символа и его числового значения
static void Main(string[] args)
{
char symbolA = 'A';
Console.WriteLine("Переменная символа 'A' = " + symbolA);
int number = symbolA;
Console.WriteLine("Числовое значение переменной symbolA = " + number);
}
При изменении числового значение меняется символ.
static void Main(string[] args)
{
char symbolA = 'A';
Console.WriteLine("Переменная символа 'A' = " + symbolA);
int number = symbolA + 1;
char value = (char)number;
Console.WriteLine("Символ 'A' + 1 = " + value);
}
Здесь, переменная number инициализирована числом, соответствующим символу 'A' — 65, добавим к этому значению единицу. Результатом такой операции станет число 66, которое соответствует символу 'B'. Для преобразования числового значения в значение с типом данных char используется явное привидение типов
Для обработки строкового значения зачастую необходимо знать количество содержащихся в нем элементов, размер значения. Для этого используется свойство — Length.
static void Main(string[] args)
{
string text = "Bill";
Console.WriteLine($"Размер значения - {text.Length}");
}
Зная, что строковое значение — массив значений символьного типа, а также размер массива, можно производить некоторые действия над строковым значением. В C# такие действия ограничены, но, к примеру в языке С++, можно заменять один символ другим. Возможности обработка строки, на различных языках программирования существенно отличается, иначе зачем столько языков программирования.
Напишем программу, определяющую какое предложение: повествовательное, побудительное или вопросительное. Для этого последний знак предложения сравним со знаками: точка, восклицательный знак, вопросительный знак.
Примем, что строковое значение состоит из одного предложение, заканчивающееся на один из вышеперечисленных знаков.
Последний символ предложения хранится в последнем элементе значения. Для получения доступа к этому элементу нам необходимо знать его индекс. В этом нам поможет свойство Length, в виде конструкции «Length-1». Дело в том, что нумерация в Length начинается не с нуля, как у индексов элементов, а с единицы. Дабы привести в соответствие числовые ряды, Length уменьшается на единицу.
Полученный индекс последнего элемента запишем в отдельную переменную «int idx = text.Length-1;». Таким образом в операции отношения сравнивается последний элемент строкового значения с символами окончания предложения.
static void Main(string[] args)
{
string text = "Hello, world!";
int idx = text.Length - 1;
if (text[idx] == '.')
{
Console.WriteLine("Предложение повествовательное");
}
if (text[idx] == '!')
{
Console.WriteLine("Предложение побудительное");
}
if (text[idx] == '?')
{
Console.WriteLine("Предложение вопросительное");
}
}
Строковое значение — набор отдельных элементов. Каждый элемент строкового значения имеет свой порядковый номер —индекс, по которому можно получить доступ к содержимому элемента. Нумерация начинается с нуля. Формат записи значения — любые символы заключенные в двойные кавычки. Количество элементов равно размер значения.
Значения с типом данных char, представляет собой значение в графическом виде, отображающее символ, но хранимое как число. Символы и соответствующие им числовые значения приведены в таблице ASCII. Формат записи — единственный символ, заключенный в одинарные кавычки.
На этом занятие закончено.
Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru
Удачи в выполнении практических заданий!