- •Глава 1. Структура программы на языке с# 6
- •Глава 1. Структура программы на языке с#
- •Задание 1. Вывод строки на экран с использованием esp-последовательности
- •Глава 2. Переменные. Основные типы данных
- •Int.MinValue
- •Задание 2. Описание переменных и преобразование типов
- •Глава 3. Ввод – вывод значений переменных
- •Задание 3. Форматирование вывода
- •Глава 4. Обработка исключительных ситуаций
- •Задание 4. Обработка стандартных исключений
- •Задание 5. Генерация исключений
- •Глава 5. Массивы в c#
- •Initially,
- •Integer array: 1 2 3 4 5
- •Integer array: 1 2 3 4 5
- •Integerarray: 1 2 3 29 30
- •Задание 6. Одномерные массивы
- •Задание 7. Многомерные массивы и массивы массивов
- •Глава 6. Символы и строки
- •If (char.IsLetter(a)) Console.WriteLine("Буква");
- •Задание 8. Работа со строками
- •Глава 7. Описание классов
- •Int m, n;// числитель и знаменатель
- •Пример решения задачи
- •Intyear_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Int year_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Задание 9. Описание классов
- •Глава 8. Наследование
- •Задание 10. Наследование
- •Глава 9. Итерфейсы
- •Interface iOutput
- •Void outputName();
- •Interface iOutput
- •Void outputName();
- •If ( a is iOutput )
- •Interface iComparable
- •Int CompareTo( object obj )
- •Задание 11. Стандартные интерфейсы.
- •Глава 10. Файлы
- •Задание 12. Работа с файлами
- •Список использованных источников
Глава 6. Символы и строки
Для хранения текстовой информации в языке C# используют следующие типы данных:
встроенный тип данных char
массивы типа char
встроенный тип данных string
строки типа StringBuilder
Рассмотрим каждый из них
Встроенный тип данных charпредставляет собой класс, предназначенный для хранения символов в двухбайтовой кодировке Unicode. Класс содержит методы анализа и преобразования символов, некоторые из которых приведены в таблице 1. Подробнее с методами данного класса можно познакомиться в библиотекеMSDN12.
Таблица6. 1.
Методы класса Char
Метод |
Описание |
GetNumericValue |
Возвращает числовое значение символа, если он является цифрой, и –1 в противном случае |
IsControl |
Возвращает true, если символ является управляющим |
IsDigit |
Возвращает true, если символ является десятичной цифрой |
IsLetter |
Возвращает true, если символ является буквой |
IsLower |
Возвращает true, если символ задан в нижнем регистре |
IsUpper |
Возвращает true, если символ записан в верхнем регистре |
IsWhiteSpace |
Возвращает true, если символ является пробельным (пробел, перевод строки и возврат каретки) |
Parse |
Преобразует строку в символ (строка должна состоять из одного символа) |
ToLower |
Преобразует символ в нижний регистр |
MaxValue, MinValue |
Возвращают символы с максимальным и минимальным кодами (эти символы не имеют видимого представления) |
Например, является ли символ, введенный с клавиатуры можно проверить следующим образом.
char a = char.Parse(Console.ReadLine());
If (char.IsLetter(a)) Console.WriteLine("Буква");
else Console.WriteLine("Не Буква");
Массив символов, как и массив любого другого типа, построен на основе базового класса Array. Инициализировать данный массив можно либо явным перечислением символьных констант в фигурных скобках, либо использую методToCharArray() для заданной строковой константы, например:
char[] a = { 'H', 'e', 'l', 'l', 'о'};
char[]b= "Hello".ToCharArray();
На практике, символьные массивы часто используются как параметры методов класса String.
Встроенный тип данных stringпредставляет собой класс, предназначенный для работы со строками символов в кодировке Unicode
Создать строку можно несколькими способами:
string s1; // инициализация отложена
string s2 = "qqq"; // инициализация строковым литералом
strings3 =newstring(); // инициализация пустой строки
string s4 = new string('a', 10); // конструктор создает строку из 10 символов ‘a’
char[] a = "Hello".ToCharArray(); // массив для инициализации строки
string s5 = new string( a ); // создание из массива символов
strings6=Console.ReadLine();//инициализация строковым литералом
Отметим, что строки типа string относятся к так называемым неизменяемым типам данных. Методы, изменяющие содержимое строки, на самом деле создают новую копию строки. Неиспользуемые "старые" копии автоматически удаляются сборщиком мусора.
Строки типа string являются ссылочным типом данных, однако в классе для них следующие операции, которые работают не со ссылки, а со значения строк:
присваивание ( = );
проверка на равенство ( == ); (строки равны, если имеют одинаковое количество символов и совпадают посимвольно);
проверка на неравенство ( != );
обращение по индексу ( [] ) (обращаться к отдельному элементу строки по индексу можно только для получения значения, но не для его изменения) ;
сцепление (конкатенация) строк ( + ).
Для получения длины строки используют свойство Length.
В следующем примере с клавиатуры считываются две строки, сравниваются и выводятся поочередно символы из первой и второй строки, а затем «остаток» более длинной строки.
Console.Write("Введите строки: ");
string s1=Console.ReadLine();
string s2= Console.ReadLine();
if (s1 == s2) Console.WriteLine("Строки равны");
else Console.WriteLine("Строки не равны");
if (s1.Length < s2.Length)
{
for (int i = 0; i < s1.Length; i++)
Console.Write("{0}{1}", s1[i], s2[i]);
for (int i = s1.Length; i < s2.Length; i++) Console.Write(s2[i]);
}
else
{
for (int i = 0; i < s2.Length; i++)
Console.Write("{0}{1}",s1[i],s2[i]);
for (int i = s2.Length; i < s1.Length; i++) Console.Write(s1[i]);
}
Если s1= “aaa”,s2= “bbbbb”, то результат работы программы следующий:
Строки не равны
abababbb
В классе String определено множество методов, позволяющих выполнять со строками практически любые действия, некоторые из которых приведены в таблице 2.Подробнее с методами данного класса можно познакомиться в библиотекеMSDN13.
Таблица 6.2.
Методы класса String
Метод |
Описание |
Compare |
Сравнение двух строк в лексикографическом (алфавитном) порядке. Разные реализации метода позволяют сравнивать строки и подстроки с учетом и без учета регистра и особенностей национального представления дат и т. д. |
Concat |
Конкатенация строк. Метод допускает сцепление произвольного числа строк |
Copy |
Создание копии строки |
Format |
Форматирование в соответствии с заданными спецификаторами формата (см. далее) |
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny |
Определение индексов первого и последнего вхождения заданной подстроки или любого символа из заданного набора |
Insert |
Вставка подстроки в заданную позицию |
Join |
Слияние массива строк в единую строку. Между элементами массива вставляются разделители (см. далее) |
Length |
Длина строки (количество символов) |
Split |
Разделение строки на элементы, используя заданные разделители. Результаты помещаются в массив строк |
Substring |
Выделение подстроки, начиная с заданной позиции |
ToCharArray |
Преобразование строки в массив символов |
ToLower, ToUpper |
Преобразование символов строки к нижнему или верхнему регистру |
Пример.Вывести слова введенной строки, начинающиеся с гласной буквы, на экран столбиком, без разделительных знаков (пробел, табуляция, точка, запятая и т.п.).
Для выделения слов из строки будем использовать метод string [] Split (char [] A), который возвращает строковый массив, содержащий подстроки данной строки, разделенные элементами заданного массива символов A. В качестве массива A зададим всевозможные разделители слов.
Для каждого слова будем проверять, начинается ли оно с гласной буквы, с помощью метода int IndexOfAny(char[] A) , который возвращает индекс (с отсчетом от нуля) первого обнаруженного в данной строке символа из указанного массива символов A. В качестве A зададим массив гласных букв.
class Program
{
static void Main()
{
Console.Write("Введите строку: ");
string s=Console.ReadLine();
char [] razd = " .;!&,".ToCharArray();//массив разделителей
string []s_new = s.Split(razd);//создание массива слов из строки
char []glas ="aeoiuyAEOIUY".ToCharArray();//массив гласных букв
foreach (string el in s_new)
if (el.IndexOfAny(glas)==0) Console.WriteLine(el);
Console.ReadKey();
}
}
Строки типа string нельзя изменять. Если требуется изменять строки, то рекомендуется использоватькласс StringBuilderиз пространства имен System.Text. Объекты этого класса объявляются только с явным вызовом конструктора класса, например,
StringBuilder s1 =new StringBuilder("ABC");
Над строками этого класса определены те же операции (кроме операции конкатенации +), что и над строками класса String. Причем с помощью операции обращения по индексу ([]) можно не только обратиться к отдельному элементу строки, но и изменять его. Конкатенацию можно заменить вызовом метода Append. Рассмотрим пример, в котором две строки вводятся с клавиатуры, в каждой из них изменяется первый символ, а затем осуществляется их конкатенация.
Console.Write("Введите строки: ");
StringBuilder sb1 = new StringBuilder (Console.ReadLine());
StringBuilder sb2 = new StringBuilder(Console.ReadLine());
sb1[0] = 'A';
sb1[0] = 'A';
sb1.Append(sb2);
Console.WriteLine(sb1);
Если sb1= “bbb”, sb2= “cccc”, то на экран будет выведено “AbbAccc”
Заметим, что у класса StringBuilder методов значительно меньше, чем у класса String, поэтому обычно с таким строками работают следующим образом:
определяется строка класса StringBuilder;
выполняются операции, требующие изменение значения;
полученная строка преобразуется в строку класса String с помощью метода ToString();
над этой строкой выполняются операции, не требующие изменения значения строки.
Например, в следующем коде в начало созданной строки StringBuilder вставляется слово “мама” с помощью метода Insert, и после преобразования в строку классаStringприменяется методSplit.
StringBuilder s1 = new StringBuilder ("мыла раму");
s1.Insert(0, "Мама ");
string s2 = s1.ToString();
foreach (string w in s2.Split(' '))
Console.WriteLine(w);
В результате работы данной программы на экран будет выведено:
Мама
мыла
раму